home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / sd-26.zip / sdtables.c < prev    next >
C/C++ Source or Header  |  1992-09-09  |  99KB  |  1,649 lines

  1. /* SD -- square dance caller's helper.
  2.  
  3.     Copyright (C) 1990, 1991, 1992  William B. Ackerman.
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 1, or (at your option)
  8.     any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19.     This is for version 25. */
  20.  
  21. /* This defines the following external variables:
  22.    general_concept_size
  23.    general_concept_offset
  24.    concept_offset_tables
  25.    concept_size_tables
  26.    concept_menu_strings
  27.    main_call_lists
  28.    number_of_calls
  29.    calling_level
  30.    getout_strings
  31.    filename_strings
  32.    resolve_names
  33.    resolve_distances
  34.    menu_names
  35.    keytab
  36.    setup_coords
  37.    nice_setup_coords
  38.    setup_limits
  39.    begin_sizes
  40.    startinfolist
  41.    map_b6_trngl
  42.    map_s6_trngl
  43.    map_2x2v
  44.    map_4x4v
  45.    map_2x4_magic
  46.    map_qtg_magic
  47.    map_qtg_intlk
  48.    map_qtg_magic_intlk
  49.    map_ptp_magic
  50.    map_ptp_intlk
  51.    map_ptp_magic_intlk
  52.    map_4x4_ns
  53.    map_4x4_ew
  54.    map_offset
  55.    map_ov_s2x4_k
  56.    map_dbloff1
  57.    map_dbloff2
  58.    map_trngl_box1
  59.    map_trngl_box2
  60.    map_lh_s2x3_3
  61.    map_lh_s2x3_2
  62.    map_rh_s2x3_3
  63.    map_rh_s2x3_2
  64.    map_lf_s2x4_r
  65.    map_rf_s2x4_r
  66.    maps_3diag
  67.    maps_3diagwk
  68.    map_lists
  69.    special_magic
  70.    special_interlocked
  71.    mark_end_of_list
  72.    marker_decline
  73.    marker_concept_mod
  74.    marker_concept_modreact
  75.    marker_concept_modtag
  76.    marker_concept_force
  77.    marker_concept_comment
  78.    concept_descriptor_table
  79.    nice_setup_concept
  80. */
  81.  
  82. #include "sd.h"
  83.  
  84.  
  85.  
  86. /* These are used in setup_coords. */
  87.  
  88. static coordrec thing1x1 = {s_1x1,
  89.    {  0},
  90.    {  0}, {
  91.       {-1, -1, -1, -1, -1, -1, -1, -1},
  92.       {-1, -1, -1, -1, -1, -1, -1, -1},
  93.       {-1, -1, -1, -1, -1, -1, -1, -1},
  94.       {-1, -1, -1, -1,  0, -1, -1, -1},
  95.       {-1, -1, -1, -1, -1, -1, -1, -1},
  96.       {-1, -1, -1, -1, -1, -1, -1, -1},
  97.       {-1, -1, -1, -1, -1, -1, -1, -1},
  98.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  99.  
  100. static coordrec thing1x2 = {s_1x2,
  101.    { -2,   2},
  102.    {  0,   0}, {
  103.       {-1, -1, -1, -1, -1, -1, -1, -1},
  104.       {-1, -1, -1, -1, -1, -1, -1, -1},
  105.       {-1, -1, -1, -1, -1, -1, -1, -1},
  106.       {-1, -1, -1,  0,  1, -1, -1, -1},
  107.       {-1, -1, -1, -1, -1, -1, -1, -1},
  108.       {-1, -1, -1, -1, -1, -1, -1, -1},
  109.       {-1, -1, -1, -1, -1, -1, -1, -1},
  110.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  111.  
  112. static coordrec thing1x3 = {s_1x3,
  113.    { -4,   0,   4},
  114.    {  0,   0,   0}, {
  115.       {-1, -1, -1, -1, -1, -1, -1, -1},
  116.       {-1, -1, -1, -1, -1, -1, -1, -1},
  117.       {-1, -1, -1, -1, -1, -1, -1, -1},
  118.       {-1, -1, -1,  0,  1,  2, -1, -1},
  119.       {-1, -1, -1, -1, -1, -1, -1, -1},
  120.       {-1, -1, -1, -1, -1, -1, -1, -1},
  121.       {-1, -1, -1, -1, -1, -1, -1, -1},
  122.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  123.  
  124. static coordrec thing1x4 = {s1x4,
  125.    { -6,  -2,   6,   2},
  126.    {  0,   0,   0,   0}, {
  127.       {-1, -1, -1, -1, -1, -1, -1, -1},
  128.       {-1, -1, -1, -1, -1, -1, -1, -1},
  129.       {-1, -1, -1, -1, -1, -1, -1, -1},
  130.       {-1, -1,  0,  1,  3,  2, -1, -1},
  131.       {-1, -1, -1, -1, -1, -1, -1, -1},
  132.       {-1, -1, -1, -1, -1, -1, -1, -1},
  133.       {-1, -1, -1, -1, -1, -1, -1, -1},
  134.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  135.  
  136. static coordrec thing1x6 = {s_1x6,
  137.    {-10,  -6,  -2,  10,   6,   2},
  138.    {  0,   0,   0,   0,   0,   0}, {
  139.       {-1, -1, -1, -1, -1, -1, -1, -1},
  140.       {-1, -1, -1, -1, -1, -1, -1, -1},
  141.       {-1, -1, -1, -1, -1, -1, -1, -1},
  142.       {-1,  0,  1,  2,  5,  4,  3, -1},
  143.       {-1, -1, -1, -1, -1, -1, -1, -1},
  144.       {-1, -1, -1, -1, -1, -1, -1, -1},
  145.       {-1, -1, -1, -1, -1, -1, -1, -1},
  146.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  147.  
  148. static coordrec thing1x8 = {s1x8,
  149.    {-14, -10,  -2,  -6,  14,  10,   2,   6},
  150.    {  0,   0,   0,   0,   0,   0,   0,   0}, {
  151.       {-1, -1, -1, -1, -1, -1, -1, -1},
  152.       {-1, -1, -1, -1, -1, -1, -1, -1},
  153.       {-1, -1, -1, -1, -1, -1, -1, -1},
  154.       { 0,  1,  3,  2,  6,  7,  5,  4},
  155.       {-1, -1, -1, -1, -1, -1, -1, -1},
  156.       {-1, -1, -1, -1, -1, -1, -1, -1},
  157.       {-1, -1, -1, -1, -1, -1, -1, -1},
  158.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  159.  
  160. static coordrec thing2x2 = {s2x2,
  161.    { -2,   2,   2,  -2},
  162.    {  2,   2,  -2,  -2}, {
  163.       {-1, -1, -1, -1, -1, -1, -1, -1},
  164.       {-1, -1, -1, -1, -1, -1, -1, -1},
  165.       {-1, -1, -1, -1, -1, -1, -1, -1},
  166.       {-1, -1, -1,  0,  1, -1, -1, -1},
  167.       {-1, -1, -1,  3,  2, -1, -1, -1},
  168.       {-1, -1, -1, -1, -1, -1, -1, -1},
  169.       {-1, -1, -1, -1, -1, -1, -1, -1},
  170.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  171.  
  172. static coordrec thing2x3 = {s_2x3,
  173.    { -4,   0,   4,   4,   0,  -4},
  174.    {  2,   2,   2,  -2,  -2,  -2}, {
  175.       {-1, -1, -1, -1, -1, -1, -1, -1},
  176.       {-1, -1, -1, -1, -1, -1, -1, -1},
  177.       {-1, -1, -1, -1, -1, -1, -1, -1},
  178.       {-1, -1, -1,  0,  1,  2, -1, -1},
  179.       {-1, -1, -1,  5,  4,  3, -1, -1},
  180.       {-1, -1, -1, -1, -1, -1, -1, -1},
  181.       {-1, -1, -1, -1, -1, -1, -1, -1},
  182.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  183.  
  184. static coordrec thing2x4 = {s2x4,
  185.    { -6,  -2,   2,   6,   6,   2,  -2,  -6},
  186.    {  2,   2,   2,   2,  -2,  -2,  -2,  -2}, {
  187.       {-1, -1, -1, -1, -1, -1, -1, -1},
  188.       {-1, -1, -1, -1, -1, -1, -1, -1},
  189.       {-1, -1, -1, -1, -1, -1, -1, -1},
  190.       {-1, -1,  0,  1,  2,  3, -1, -1},
  191.       {-1, -1,  7,  6,  5,  4, -1, -1},
  192.       {-1, -1, -1, -1, -1, -1, -1, -1},
  193.       {-1, -1, -1, -1, -1, -1, -1, -1},
  194.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  195.  
  196. static coordrec thing2x6 = {s2x6,
  197.    {-10,  -6,  -2,   2,   6,  10,  10,   6,   2,  -2,  -6,  -10},
  198.    {  2,   2,   2,   2,   2,   2,  -2,  -2,  -2,  -2,  -2,  -2}, {
  199.       {-1, -1, -1, -1, -1, -1, -1, -1},
  200.       {-1, -1, -1, -1, -1, -1, -1, -1},
  201.       {-1, -1, -1, -1, -1, -1, -1, -1},
  202.       {-1,  0,  1,  2,  3,  4,  5, -1},
  203.       {-1, 11, 10,  9,  8,  7,  6, -1},
  204.       {-1, -1, -1, -1, -1, -1, -1, -1},
  205.       {-1, -1, -1, -1, -1, -1, -1, -1},
  206.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  207.  
  208. static coordrec thing2x8 = {s2x8,
  209.    {-14, -10,  -6,  -2,   2,   6,  10,  14,  14,  10,   6,   2,  -2,  -6, -10, -14},
  210.    {  2,   2,   2,   2,   2,   2,   2,   2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2}, {
  211.       {-1, -1, -1, -1, -1, -1, -1, -1},
  212.       {-1, -1, -1, -1, -1, -1, -1, -1},
  213.       {-1, -1, -1, -1, -1, -1, -1, -1},
  214.       { 0,  1,  2,  3,  4,  5,  6,  7},
  215.       {15, 14, 13, 12, 11, 10,  9,  8},
  216.       {-1, -1, -1, -1, -1, -1, -1, -1},
  217.       {-1, -1, -1, -1, -1, -1, -1, -1},
  218.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  219.  
  220. static coordrec thing3x4 = {s3x4,
  221.    { -6,  -2,   2,   6,   6,   2,   6,   2,  -2,  -6,  -6,  -2},
  222.    {  4,   4,   4,   4,   0,   0,  -4,  -4,  -4,  -4,   0,   0}, {
  223.       {-1, -1, -1, -1, -1, -1, -1, -1},
  224.       {-1, -1, -1, -1, -1, -1, -1, -1},
  225.       {-1, -1,  0,  1,  2,  3, -1, -1},
  226.       {-1, -1, 10, 11,  5,  4, -1, -1},
  227.       {-1, -1,  9,  8,  7,  6, -1, -1},
  228.       {-1, -1, -1, -1, -1, -1, -1, -1},
  229.       {-1, -1, -1, -1, -1, -1, -1, -1},
  230.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  231.  
  232. static coordrec thinggal = {s_galaxy,
  233.    { -7,  -2,   0,   2,   7,   2,   0,  -2},
  234.    {  0,   2,   7,   2,   0,  -2,  -7,  -2}, {
  235.       {-1, -1, -1, -1, -1, -1, -1, -1},
  236.       {-1, -1, -1, -1, -1, -1, -1, -1},
  237.       {-1, -1, -1, -1,  2, -1, -1, -1},
  238.       {-1, -1,  0,  1,  3,  4, -1, -1},
  239.       {-1, -1, -1,  7,  5, -1, -1, -1},
  240.       {-1, -1, -1, -1,  6, -1, -1, -1},
  241.       {-1, -1, -1, -1, -1, -1, -1, -1},
  242.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  243.  
  244. static coordrec thingrigger = {s_rigger,
  245.    { -2,   2,  10,   6,   2,  -2, -10,  -6},
  246.    {  2,   2,   0,   0,  -2,  -2,   0,   0}, {
  247.       {-1, -1, -1, -1, -1, -1, -1, -1},
  248.       {-1, -1, -1, -1, -1, -1, -1, -1},
  249.       {-1, -1, -1, -1, -1, -1, -1, -1},
  250.       {-1,  6,  7,  0,  1,  3,  2, -1},
  251.       {-1, -1, -1,  5,  4, -1, -1, -1},
  252.       {-1, -1, -1, -1, -1, -1, -1, -1},
  253.       {-1, -1, -1, -1, -1, -1, -1, -1},
  254.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  255.  
  256. static coordrec thingspindle = {s_spindle,
  257.    { -4,   0,   4,   8,   4,   0,  -4,  -8},
  258.    {  2,   2,   2,   0,  -2,  -2,  -2,   0}, {
  259.       {-1, -1, -1, -1, -1, -1, -1, -1},
  260.       {-1, -1, -1, -1, -1, -1, -1, -1},
  261.       {-1, -1, -1, -1, -1, -1, -1, -1},
  262.       {-1, -1,  7,  0,  1,  2,  3, -1},
  263.       {-1, -1, -1,  6,  5,  4, -1, -1},
  264.       {-1, -1, -1, -1, -1, -1, -1, -1},
  265.       {-1, -1, -1, -1, -1, -1, -1, -1},
  266.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  267.  
  268. static coordrec thingbone = {s_bone,
  269.    {-10,  10,   6,   2,  10, -10,  -6,  -2},
  270.    {  2,   2,   0,   0,  -2,  -2,   0,   0}, {
  271.       {-1, -1, -1, -1, -1, -1, -1, -1},
  272.       {-1, -1, -1, -1, -1, -1, -1, -1},
  273.       {-1, -1, -1, -1, -1, -1, -1, -1},
  274.       {-1,  0,  6,  7,  3,  2,  1, -1},
  275.       {-1,  5, -1, -1, -1, -1,  4, -1},
  276.       {-1, -1, -1, -1, -1, -1, -1, -1},
  277.       {-1, -1, -1, -1, -1, -1, -1, -1},
  278.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  279.  
  280. static coordrec thingqtag = {s_qtag,       /* "fudged" coordinates */
  281.    { -4,   5,   6,   2,   4,  -5,  -6,  -2},
  282.    {  5,   5,   0,   0,  -5,  -5,   0,   0}, {
  283.       {-1, -1, -1, -1, -1, -1, -1, -1},
  284.       {-1, -1, -1, -1, -1, -1, -1, -1},
  285.       {-1, -1, -1,  0, -1,  1, -1, -1},
  286.       {-1, -1,  6,  7,  3,  2, -1, -1},
  287.       {-1, -1, -1, -1, -1, -1, -1, -1},
  288.       {-1, -1,  5, -1, -1,  4, -1, -1},
  289.       {-1, -1, -1, -1, -1, -1, -1, -1},
  290.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  291.  
  292. static coordrec nicethingqtag = {s_qtag,   /* "true" coordinates */
  293.    { -5,   5,   6,   2,   5,  -5,  -6,  -2},
  294.    {  5,   5,   0,   0,  -5,  -5,   0,   0}, {
  295.       {-1, -1, -1, -1, -1, -1, -1, -1},
  296.       {-1, -1, -1, -1, -1, -1, -1, -1},
  297.       {-1, -1,  0, -1, -1,  1, -1, -1},
  298.       {-1, -1,  6,  7,  3,  2, -1, -1},
  299.       {-1, -1, -1, -1, -1, -1, -1, -1},
  300.       {-1, -1,  5, -1, -1,  4, -1, -1},
  301.       {-1, -1, -1, -1, -1, -1, -1, -1},
  302.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  303.  
  304. static coordrec nicethingdmd = {sdmd,          /* "true" coordinates -- there is no "fudged" version */
  305.    { -4,   0,   4,   0},
  306.    {  0,   4,   0,  -4}, {
  307.       {-1, -1, -1, -1, -1, -1, -1, -1},
  308.       {-1, -1, -1, -1, -1, -1, -1, -1},
  309.       {-1, -1, -1, -1,  1, -1, -1, -1},
  310.       {-1, -1, -1,  0, -1,  2, -1, -1},
  311.       {-1, -1, -1, -1,  3, -1, -1, -1},
  312.       {-1, -1, -1, -1, -1, -1, -1, -1},
  313.       {-1, -1, -1, -1, -1, -1, -1, -1},
  314.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  315.  
  316. static coordrec nicethingshort6 = {s_short6,   /* "true" coordinates -- there is no "fudged" version */
  317.    { -2,   0,   2,   2,   0,  -2},
  318.    {  2,   6,   2,  -2,  -6,  -2}, {
  319.       {-1, -1, -1, -1, -1, -1, -1, -1},
  320.       {-1, -1, -1, -1, -1, -1, -1, -1},
  321.       {-1, -1, -1, -1,  1, -1, -1, -1},
  322.       {-1, -1, -1,  0,  2, -1, -1, -1},
  323.       {-1, -1, -1,  5,  3, -1, -1, -1},
  324.       {-1, -1, -1, -1,  4, -1, -1, -1},
  325.       {-1, -1, -1, -1, -1, -1, -1, -1},
  326.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  327.  
  328. static coordrec nicethingphan = {s_c1phan,   /* "true" coordinates -- there is no "fudged" version */
  329.    {-10,  -6,  -2,  -6,   6,  10,   6,   2,  10,   6,   2,   6,  -6, -10,  -6,  -2},
  330.    {  6,  10,   6,   2,  10,   6,   2,   6,  -6, -10,  -6,  -2, -10,  -6,  -2,  -6}, {
  331.       {-1, -1, -1, -1, -1, -1, -1, -1},
  332.       {-1, -1,  1, -1, -1,  4, -1, -1},
  333.       {-1,  0, -1,  2,  7, -1,  5, -1},
  334.       {-1, -1,  3, -1, -1,  6, -1, -1},
  335.       {-1, -1, 14, -1, -1, 11, -1, -1},
  336.       {-1, 13, -1, 15, 10, -1,  8, -1},
  337.       {-1, -1, 12, -1, -1,  9, -1, -1},
  338.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  339.  
  340. static coordrec thingglass = {s_hrglass,
  341.    { -4,   5,   5,   0,   4,  -5,  -5,   0},
  342.    {  5,   5,   0,   2,  -5,  -5,   0,  -2}, {
  343.       {-1, -1, -1, -1, -1, -1, -1, -1},
  344.       {-1, -1, -1, -1, -1, -1, -1, -1},
  345.       {-1, -1, -1,  0, -1,  1, -1, -1},
  346.       {-1, -1,  6, -1,  3,  2, -1, -1},
  347.       {-1, -1, -1, -1,  7, -1, -1, -1},
  348.       {-1, -1,  5, -1, -1,  4, -1, -1},
  349.       {-1, -1, -1, -1, -1, -1, -1, -1},
  350.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  351.  
  352. static coordrec thing4x4 = {s4x4,
  353.    {  6,   6,   6,   2,   6,   2,  -2,   2,  -6,  -6,  -6,  -2,  -6,  -2,   2,  -2},
  354.    {  6,   2,  -2,   2,  -6,  -6,  -6,  -2,  -6,  -2,   2,  -2,   6,   6,   6,   2}, {
  355.       {-1, -1, -1, -1, -1, -1, -1, -1},
  356.       {-1, -1, -1, -1, -1, -1, -1, -1},
  357.       {-1, -1, 12, 13, 14,  0, -1, -1},
  358.       {-1, -1, 10, 15,  3,  1, -1, -1},
  359.       {-1, -1,  9, 11,  7,  2, -1, -1},
  360.       {-1, -1,  8,  6,  5,  4, -1, -1},
  361.       {-1, -1, -1, -1, -1, -1, -1, -1},
  362.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  363.  
  364. static coordrec thing4x6 = {s4x6,
  365.    {-10,  -6,  -2,   2,   6,  10,  10,   6,   2,  -2,  -6, -10,  10,   6,   2,  -2,  -6, -10, -10,  -6,  -2,   2,   6,  10},
  366.    {  6,   6,   6,   6,   6,   6,   2,   2,   2,   2,   2,   2,  -6,  -6,  -6,  -6,  -6,  -6,  -2,  -2,  -2,  -2,  -2,  -2}, {
  367.       {-1, -1, -1, -1, -1, -1, -1, -1},
  368.       {-1, -1, -1, -1, -1, -1, -1, -1},
  369.       {-1,  0,  1,  2,  3,  4,  5, -1},
  370.       {-1, 11, 10,  9,  8,  7,  6, -1},
  371.       {-1, 18, 19, 20, 21, 22, 23, -1},
  372.       {-1, 17, 16, 15, 14, 13, 12, -1},
  373.       {-1, -1, -1, -1, -1, -1, -1, -1},
  374.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  375.  
  376. static coordrec thingblob = {s_bigblob,
  377.    { -2,   2,   2,   6,   6,   2,  10,  10,   6,   6,   2,   2,   2,  -2,  -2,  -6,  -6,  -2, -10, -10,  -6,  -6,  -2,  -2},
  378.    { 10,  10,   6,   6,   2,   2,   2,  -2,  -2,  -6,  -6,  -2, -10, -10,  -6,  -6,  -2,  -2,  -2,   2,   2,   6,   6,   2}, {
  379.       {-1, -1, -1, -1, -1, -1, -1, -1},
  380.       {-1, -1, -1,  0,  1, -1, -1, -1},
  381.       {-1, -1, 21, 22,  2,  3, -1, -1},
  382.       {-1, 19, 20, 23,  5,  4,  6, -1},
  383.       {-1, 18, 16, 17, 11,  8,  7, -1},
  384.       {-1, -1, 15, 14, 10,  9, -1, -1},
  385.       {-1, -1, -1, 13, 12, -1, -1, -1},
  386.       {-1, -1, -1, -1, -1, -1, -1, -1}}};
  387.  
  388.  
  389.  
  390. /* BEWARE!!  This list is keyed to the definition of "level" in sd.h . */
  391. char *getout_strings[] = {
  392.    "Mainstream",
  393.    "Plus",
  394.    "A1",
  395.    "A2",
  396.    "C1",
  397.    "C2",
  398.    "C3A",
  399.    "C3",
  400.    "C3X",
  401.    "C4A",
  402.    "C4",
  403.    "all",
  404.    ""};
  405.  
  406. /* BEWARE!!  This list is keyed to the definition of "level" in sd.h . */
  407. char *filename_strings[] = {
  408.    "sequence.MS",
  409.    "sequence.Plus",
  410.    "sequence.A1",
  411.    "sequence.A2",
  412.    "sequence.C1",
  413.    "sequence.C2",
  414.    "sequence.C3A",
  415.    "sequence.C3",
  416.    "sequence.C3X",
  417.    "sequence.C4A",
  418.    "sequence.C4",
  419.    "sequence.all",
  420.    ""};
  421.  
  422. /* BEWARE!!  This list is keyed to the definition of "resolve_kind" in sd.h . */
  423. char *resolve_names[] = {
  424.    "???",
  425.    "right and left grand",
  426.    "left allemande",
  427.    "extend, right and left grand",
  428.    "extend, left allemande",
  429.    "circulate, right and left grand",
  430.    "circulate, left allemande",
  431.    "pass thru, right and left grand",
  432.    "pass thru, left allemande",
  433.    "trade by, right and left grand",
  434.    "trade by, left allemande",
  435.    "cross by, right and left grand",
  436.    "cross by, left allemande",
  437.    "dixie grand, left allemande",
  438.    "promenade"};
  439.  
  440. char *resolve_distances[] = {
  441.    "  (At home)",
  442.    "  (1/8 promenade)",
  443.    "  (1/4 promenade)",
  444.    "  (3/8 promenade)",
  445.    "  (1/2 promenade)",
  446.    "  (5/8 promenade)",
  447.    "  (3/4 promenade)",
  448.    "  (7/8 promenade)"};
  449.  
  450. /* BEWARE!!  This list is keyed to the definition of "call_list_kind" in sd.h . */
  451. char *menu_names[] = {
  452.    "???",
  453.    "???",
  454.    "(any setup)",
  455.    "grand wave",
  456.    "left grand wave",
  457.    "dpt",
  458.    "cdpt",
  459.    "column",
  460.    "left column",
  461.    "8 chain",
  462.    "trade by",
  463.    "facing lines",
  464.    "lines-out",
  465.    "waves",
  466.    "left waves",
  467.    "2-faced lines",
  468.    "left 2-faced lines",
  469.    "grand column",
  470.    "diamond/qtag"};
  471.  
  472. /* BEWARE!!  This list is keyed to the definition of "setup_kind" in database.h . */
  473. begin_kind keytab[][2] = {
  474.    {b_nothing,       b_nothing},        /* nothing */
  475.    {b_1x1,           b_1x1},            /* s_1x1 */
  476.    {b_1x2,           b_2x1},            /* s_1x2 */
  477.    {b_1x3,           b_3x1},            /* s_1x3 */
  478.    {b_2x2,           b_2x2},            /* s2x2 */
  479.    {b_dmd,           b_pmd},            /* sdmd */
  480.    {b_star,          b_star},           /* s_star */
  481.    {b_trngl,         b_ptrngl},         /* s_trngl */
  482.    {b_bone6,         b_pbone6},         /* s_bone6 */
  483.    {b_short6,        b_pshort6},        /* s_short6 */
  484.    {b_qtag,          b_pqtag},          /* s_qtag */
  485.    {b_nothing,       b_nothing},        /* s_bone */
  486.    {b_rigger,        b_prigger},        /* s_rigger */
  487.    {b_spindle,       b_pspindle},       /* s_spindle */
  488.    {b_hrglass,       b_phrglass},       /* s_hrglass */
  489.    {b_nothing,       b_nothing},        /* s_hyperglass */
  490.    {b_crosswave,     b_pcrosswave},     /* s_crosswave */
  491.    {b_1x4,           b_4x1},            /* s1x4 */
  492.    {b_1x8,           b_8x1},            /* s1x8 */
  493.    {b_2x4,           b_4x2},            /* s2x4 */
  494.    {b_2x3,           b_3x2},            /* s_2x3 */
  495.    {b_1x6,           b_6x1},            /* s_1x6 */
  496.    {b_3x4,           b_4x3},            /* s3x4 */
  497.    {b_2x6,           b_6x2},            /* s2x6 */
  498.    {b_2x8,           b_8x2},            /* s2x8 */
  499.    {b_4x4,           b_4x4},            /* s4x4 */
  500.    {b_c1phan,        b_c1phan},         /* s_c1phan */
  501.    {b_nothing,       b_nothing},        /* s_bigblob */
  502.    {b_ptpd,          b_pptpd},          /* s_ptpd */
  503.    {b_3x1dmd,        b_p3x1dmd},        /* s_3x1dmd */
  504.    {b_3dmd,          b_p3dmd},          /* s_3dmd */
  505.    {b_4dmd,          b_p4dmd},          /* s_4dmd */
  506.    {b_nothing,       b_nothing},        /* s_concstar */
  507.    {b_nothing,       b_nothing},        /* s_concstar12 */
  508.    {b_nothing,       b_nothing},        /* s_concstar16 */
  509.    {b_galaxy,        b_galaxy},         /* s_galaxy */
  510.    {b_nothing,       b_nothing},        /* s4x6 */
  511.    {b_nothing,       b_nothing},        /* s_thar */
  512.    {b_nothing,       b_nothing}};       /* s_normal_concentric */
  513.  
  514.  
  515. /* These "coordrec" items have the fudged coordinates that are used for doing
  516.    press/truck calls.  For some setups, the coordinates of some people are
  517.    deliberately moved away from the obvious precise matrix spots so that
  518.    those people can't press or truck.  For example, the lateral spacing of
  519.    diamond points is not an integer.  If a diamond point does any truck or loop
  520.    call, he/she will not end up on the other diamond point spot (or any other
  521.    spot in the formation), so the call will not be legal.  This enforces our
  522.    view, not shared by all callers (Hi, Clark!) that the diamond points are NOT
  523.    as if the ends of lines of 3, and hence can NOT trade with each other by
  524.    doing a right loop 1. */
  525.  
  526. /* BEWARE!!  This list is keyed to the definition of "setup_kind" in database.h . */
  527. coordrec *setup_coords[] = {
  528.    0,                  /* nothing */
  529.    &thing1x1,          /* s_1x1 */
  530.    &thing1x2,          /* s_1x2 */
  531.    &thing1x3,          /* s_1x3 */
  532.    &thing2x2,          /* s2x2 */
  533.    0,                  /* sdmd */      /* nothing here -- press and truck not done here */
  534.    0,                  /* s_star */
  535.    0,                  /* s_trngl */
  536.    0,                  /* s_bone6 */
  537.    0,                  /* s_short6 */  /* nothing here -- press and truck not done here */
  538.    &thingqtag,         /* s_qtag */
  539.    &thingbone,         /* s_bone */
  540.    &thingrigger,       /* s_rigger */
  541.    &thingspindle,      /* s_spindle */
  542.    &thingglass,        /* s_hrglass */
  543.    0,                  /* s_hyperglass */
  544.    0,                  /* s_crosswave */
  545.    &thing1x4,          /* s1x4 */
  546.    &thing1x8,          /* s1x8 */
  547.    &thing2x4,          /* s2x4 */
  548.    &thing2x3,          /* s_2x3 */
  549.    &thing1x6,          /* s_1x6 */
  550.    &thing3x4,          /* s3x4 */
  551.    &thing2x6,          /* s2x6 */
  552.    &thing2x8,          /* s2x8 */
  553.    &thing4x4,          /* s4x4 */
  554.    0,                  /* s_c1phan */
  555.    &thingblob,         /* s_bigblob */
  556.    0,                  /* s_ptpd */
  557.    0,                  /* s_3x1dmd */
  558.    0,                  /* s_3dmd */
  559.    0,                  /* s_4dmd */
  560.    0,                  /* s_concstar */
  561.    0,                  /* s_concstar12 */
  562.    0,                  /* s_concstar16 */
  563.    &thinggal,          /* s_galaxy */
  564.    &thing4x6,          /* s4x6 */
  565.    0,                  /* s_thar */
  566.    0};                 /* s_normal_concentric */
  567.  
  568.  
  569. /* The above table is not suitable for performing mirror inversion because,
  570.    for example, the points of diamonds do not reflect onto each other.  This
  571.    table has unfudged coordinates, in which all the symmetries are observed.
  572.    This is the table that is used for mirror reversal.  Most of the items in
  573.    it are the same as those in the table above. */
  574.  
  575. /* BEWARE!!  This list is keyed to the definition of "setup_kind" in database.h . */
  576. coordrec *nice_setup_coords[] = {
  577.    0,                  /* nothing */
  578.    &thing1x1,          /* s_1x1 */
  579.    &thing1x2,          /* s_1x2 */
  580.    &thing1x3,          /* s_1x3 */
  581.    &thing2x2,          /* s2x2 */
  582.    &nicethingdmd,      /* sdmd */
  583.    0,                  /* s_star */
  584.    0,                  /* s_trngl */
  585.    0,                  /* s_bone6 */
  586.    &nicethingshort6,   /* s_short6 */
  587.    &nicethingqtag,     /* s_qtag */
  588.    &thingbone,         /* s_bone */
  589.    &thingrigger,       /* s_rigger */
  590.    &thingspindle,      /* s_spindle */
  591.    &thingglass,        /* s_hrglass */
  592.    0,                  /* s_hyperglass */
  593.    0,                  /* s_crosswave */
  594.    &thing1x4,          /* s1x4 */
  595.    &thing1x8,          /* s1x8 */
  596.    &thing2x4,          /* s2x4 */
  597.    &thing2x3,          /* s_2x3 */
  598.    &thing1x6,          /* s_1x6 */
  599.    &thing3x4,          /* s3x4 */
  600.    &thing2x6,          /* s2x6 */
  601.    &thing2x8,          /* s2x8 */
  602.    &thing4x4,          /* s4x4 */
  603.    &nicethingphan,     /* s_c1phan */
  604.    &thingblob,         /* s_bigblob */
  605.    0,                  /* s_ptpd */
  606.    0,                  /* s_3x1dmd */
  607.    0,                  /* s_3dmd */
  608.    0,                  /* s_4dmd */
  609.    0,                  /* s_concstar */
  610.    0,                  /* s_concstar12 */
  611.    0,                  /* s_concstar16 */
  612.    &thinggal,          /* s_galaxy */
  613.    &thing4x6,          /* s4x6 */
  614.    0,                  /* s_thar */
  615.    0};                 /* s_normal_concentric */
  616.  
  617.  
  618. /* BEWARE!!  This list is keyed to the definition of "setup_kind" in database.h . */
  619. int setup_limits[] = {
  620.    -1,         /* nothing */
  621.    0,          /* s_1x1 */
  622.    1,          /* s_1x2 */
  623.    2,          /* s_1x3 */
  624.    3,          /* s2x2 */
  625.    3,          /* sdmd */
  626.    3,          /* s_star */
  627.    2,          /* s_trngl */
  628.    5,          /* s_bone6 */
  629.    5,          /* s_short6 */
  630.    7,          /* s_qtag */
  631.    7,          /* s_bone */
  632.    7,          /* s_rigger */
  633.    7,          /* s_spindle */
  634.    7,          /* s_hrglass */
  635.    11,         /* s_hyperglass */
  636.    7,          /* s_crosswave */
  637.    3,          /* s1x4 */
  638.    7,          /* s1x8 */
  639.    7,          /* s2x4 */
  640.    5,          /* s_2x3 */
  641.    5,          /* s_1x6 */
  642.    11,         /* s3x4 */
  643.    11,         /* s2x6 */
  644.    15,         /* s2x8 */
  645.    15,         /* s4x4 */
  646.    15,         /* s_c1phan */
  647.    23,         /* s_bigblob */
  648.    7,          /* s_ptpd */
  649.    7,          /* s_3x1dmd */
  650.    11,         /* s_3dmd */
  651.    15,         /* s_4dmd */
  652.    7,          /* s_concstar */
  653.    11,         /* s_concstar12 */
  654.    15,         /* s_concstar16 */
  655.    7,          /* s_galaxy */
  656.    23,         /* s4x6 */
  657.    7,          /* s_thar */
  658.    -1};        /* s_normal_concentric */
  659.  
  660. /* BEWARE!!  This list is keyed to the definition of "begin_kind" in SD.H. */
  661. /*   It must also match the similar table in the database-building program. */
  662. int begin_sizes[] = {
  663.    0,          /* b_nothing */
  664.    1,          /* b_1x1 */
  665.    2,          /* b_1x2 */
  666.    2,          /* b_2x1 */
  667.    3,          /* b_1x3 */
  668.    3,          /* b_3x1 */
  669.    4,          /* b_2x2 */
  670.    4,          /* b_dmd */
  671.    4,          /* b_pmd */
  672.    4,          /* b_star */
  673.    6,          /* b_trngl */
  674.    6,          /* b_ptrngl */
  675.    6,          /* b_bone6 */
  676.    6,          /* b_pbone6 */
  677.    6,          /* b_short6 */
  678.    6,          /* b_pshort6 */
  679.    8,          /* b_qtag */
  680.    8,          /* b_pqtag */
  681.    8,          /* b_bone */
  682.    8,          /* b_pbone */
  683.    8,          /* b_rigger */
  684.    8,          /* b_prigger */
  685.    8,          /* b_spindle */
  686.    8,          /* b_pspindle */
  687.    8,          /* b_hrglass */
  688.    8,          /* b_phrglass */
  689.    8,          /* b_crosswave */
  690.    8,          /* b_pcrosswave */
  691.    4,          /* b_1x4 */
  692.    4,          /* b_4x1 */
  693.    8,          /* b_1x8 */
  694.    8,          /* b_8x1 */
  695.    8,          /* b_2x4 */
  696.    8,          /* b_4x2 */
  697.    6,          /* b_2x3 */
  698.    6,          /* b_3x2 */
  699.    6,          /* b_1x6 */
  700.    6,          /* b_6x1 */
  701.    12,         /* b_3x4 */
  702.    12,         /* b_4x3 */
  703.    12,         /* b_2x6 */
  704.    12,         /* b_6x2 */
  705.    16,         /* b_2x8 */
  706.    16,         /* b_8x2 */
  707.    16,         /* b_4x4 */
  708.    16,         /* b_c1phan */
  709.    16,         /* b_pc1phan */
  710.    8,          /* b_galaxy */
  711.    24,         /* b_4x6 */
  712.    24,         /* b_6x4 */
  713.    8,          /* b_thar */
  714.    8,          /* b_ptpd */
  715.    8,          /* b_pptpd */
  716.    8,          /* b_3x1dmd */
  717.    8,          /* b_p3x1dmd */
  718.    12,         /* b_3dmd */
  719.    12,         /* b_p3dmd */
  720.    16,         /* b_4dmd */
  721.    16};        /* b_p4dmd */
  722.  
  723.  
  724. #define B1A 0000
  725. #define G1A 0100
  726. #define B2A 0200
  727. #define G2A 0300
  728. #define B3A 0400
  729. #define G3A 0500
  730. #define B4A 0600
  731. #define G4A 0700
  732.  
  733. #define B1B (ID2_NSG|ID2_NSB|ID2_NHG|ID2_HCOR|ID2_HEAD|ID2_BOY)
  734. #define G1B (ID2_NSG|ID2_NSB|ID2_NHB|ID2_SCOR|ID2_HEAD|ID2_GIRL)
  735. #define B2B (ID2_NSG|ID2_NHG|ID2_NHB|ID2_SCOR|ID2_SIDE|ID2_BOY)
  736. #define G2B (ID2_NSB|ID2_NHG|ID2_NHB|ID2_HCOR|ID2_SIDE|ID2_GIRL)
  737. #define B3B B1B
  738. #define G3B G1B
  739. #define B4B B2B
  740. #define G4B G2B
  741.  
  742. /* BEWARE!!  This list is keyed to the definition of "start_select_kind" in sd.h. */
  743. startinfo startinfolist[] = {
  744.    {
  745.       "???",      /* A non-existent setup. */
  746.       FALSE,
  747.       {
  748.          nothing,
  749.          0,
  750.          {{0,0}},
  751.          1
  752.       }
  753.    },
  754.    {
  755.       "Heads 1P2P",
  756.       FALSE,                         /* into_the_middle */
  757.       {
  758.          s2x4,                       /* kind */
  759.          0,                          /* setupflags */
  760.          {{G2A|d_south,G2B}, {B2A|d_south,B2B}, {G1A|d_south,G1B}, {B1A|d_south,B1B},
  761.             {G4A|d_north,G4B}, {B4A|d_north,B4B}, {G3A|d_north,G3B}, {B3A|d_north,B3B}},
  762.          1                           /* rotation */
  763.       }
  764.    },
  765.    {
  766.       "Sides 1P2P",
  767.       FALSE,                         /* into_the_middle */
  768.       {
  769.          s2x4,                       /* kind */
  770.          0,                          /* setupflags */
  771.          {{G3A|d_south,G3B}, {B3A|d_south,B3B}, {G2A|d_south,G2B}, {B2A|d_south,B2B},
  772.             {G1A|d_north,G1B}, {B1A|d_north,B1B}, {G4A|d_north,G4B}, {B4A|d_north,B4B}},
  773.          0                           /* rotation */
  774.       }
  775.    },
  776.    {
  777.       "HEADS",
  778.       TRUE,                          /* into_the_middle */
  779.       {
  780.          s2x4,                       /* kind */
  781.          0,                          /* setupflags */
  782.          {{B4A|d_east,B4B}, {G3A|d_south,G3B}, {B3A|d_south,B3B}, {G2A|d_west,G2B},
  783.             {B2A|d_west,B2B}, {G1A|d_north,G1B}, {B1A|d_north,B1B}, {G4A|d_east,G4B}},
  784.          0                           /* rotation */
  785.       }
  786.    },
  787.    {
  788.       "SIDES",
  789.       TRUE,                          /* into_the_middle */
  790.       {
  791.          s2x4,                       /* kind */
  792.          0,                          /* setupflags */
  793.          {{B3A|d_east,B3B}, {G2A|d_south,G2B}, {B2A|d_south,B2B}, {G1A|d_west,G1B},
  794.             {B1A|d_west,B1B}, {G4A|d_north,G4B}, {B4A|d_north,B4B}, {G3A|d_east,G3B}},
  795.          1                           /* rotation */
  796.       }
  797.    },
  798.    {
  799.       "From squared set",
  800.       FALSE,                         /* into_the_middle */
  801.       {
  802.          s4x4,                       /* kind */
  803.          0,                          /* setupflags */
  804.          {{0,0}, {G2A|d_west,G2B}, {B2A|d_west,B2B}, {0,0}, {0,0}, {G1A|d_north,G1B},
  805.             {B1A|d_north,B1B}, {0,0}, {0,0}, {G4A|d_east,G4B}, {B4A|d_east,B4B}, {0,0},
  806.             {0,0}, {G3A|d_south,G3B}, {B3A|d_south,B3B}, {0,0}},
  807.          0                           /* rotation */
  808.       }
  809.    }
  810. #ifdef ripnsnortstuff
  811.    {
  812.       "1/4 stable, couple #3 rip 'n' snort, then HEADS",
  813.       TRUE,                          /* into_the_middle */
  814.       {
  815.          s2x4,                       /* kind */
  816.          0,                          /* setupflags */
  817.          {{B4A|d_south,B4B}, {G3A|d_west,G3B}, {B3A|d_east,B3B}, {G2A|d_south,G2B},
  818.             {B2A|d_south,B2B}, {G1A|d_west,G1B}, {B1A|d_east,B1B}, {G4A|d_south,G4B}},
  819.          0                           /* rotation */
  820.       }
  821.    }
  822. #endif
  823. };
  824.  
  825.  
  826.  
  827.  
  828. /*                                                                                                         setups are stacked on top of each other -----------------|
  829.                                                                                        each setup is rotated clockwise before being concatenated ---------------|   |
  830.                                                                                              (rot = 2 for second setup upside-down, 1-fold symmetry)            |   |
  831.                                                                                                 (rot = 3 for 1st setup ccw, 2nd cw, 1-fold symmetry)            |   |
  832.                                                                                                                                                                 V   V
  833.                                             map1                             map2                        map3 map4   map_kind          arity  outer   inner    rot vert */
  834.  
  835.        map_thing map_b6_trngl          = {{5, 4, 0},                      {2, 1, 3},                      {0}, {0}, MPKIND__SPLIT,       2,  s_bone6, s_trngl,  3, 0};
  836.        map_thing map_s6_trngl          = {{4, 5, 3},                      {1, 2, 0},                      {0}, {0}, MPKIND__SPLIT,       2,  s_short6, s_trngl, 2, 1};
  837.        map_thing map_2x2v              = {{0, 3},                         {1, 2},                         {0}, {0}, MPKIND__SPLIT,       2,  s2x2,   s_1x2,     1, 0};
  838.        map_thing map_2x4_magic         = {{0, 6, 3, 5},                   {7, 1, 4, 2},                   {0}, {0}, MPKIND__NONE,        2,  s2x4,   s1x4,      0, 0};
  839.        map_thing map_qtg_magic         = {{0, 2, 5, 3},                   {1, 7, 4, 6},                   {0}, {0}, MPKIND__NONE,        2,  s_qtag, sdmd,      1, 0};
  840.        map_thing map_qtg_intlk         = {{0, 3, 5, 6},                   {1, 2, 4, 7},                   {0}, {0}, MPKIND__NONE,        2,  s_qtag, sdmd,      1, 0};
  841.        map_thing map_qtg_magic_intlk   = {{0, 2, 5, 7},                   {1, 3, 4, 6},                   {0}, {0}, MPKIND__NONE,        2,  s_qtag, sdmd,      1, 0};
  842.        map_thing map_ptp_magic         = {{6, 1, 4, 3},                   {0, 7, 2, 5},                   {0}, {0}, MPKIND__NONE,        2,  s_ptpd, sdmd,      0, 0};
  843.        map_thing map_ptp_intlk         = {{0, 1, 6, 3},                   {2, 7, 4, 5},                   {0}, {0}, MPKIND__NONE,        2,  s_ptpd, sdmd,      0, 0};
  844.        map_thing map_ptp_magic_intlk   = {{2, 1, 4, 3},                   {0, 7, 6, 5},                   {0}, {0}, MPKIND__NONE,        2,  s_ptpd, sdmd,      0, 0};
  845. static map_thing map_2x4_diagonal      = {{2, 3, 6, 7},                   {0, 1, 4, 5},                   {0}, {0}, MPKIND__NONE,        2,  s2x4,   s2x2,      0, 0};
  846. static map_thing map_2x4_int_pgram     = {{1, 3, 5, 7},                   {0, 2, 4, 6},                   {0}, {0}, MPKIND__NONE,        2,  s2x4,   s2x2,      0, 0};
  847. static map_thing map_2x4_trapezoid     = {{1, 2, 4, 7},                   {0, 3, 5, 6},                   {0}, {0}, MPKIND__NONE,        2,  s2x4,   s2x2,      0, 0};
  848. static map_thing map_3x4_2x3_intlk     = {{2, 5, 7, 9, 10, 0},            {3, 4, 6, 8, 11, 1},            {0}, {0}, MPKIND__NONE,        2,  s3x4,   s_2x3,     1, 0};
  849. static map_thing map_3x4_2x3_conc      = {{3, 4, 6, 9, 10, 0},            {2, 5, 7, 8, 11, 1},            {0}, {0}, MPKIND__NONE,        2,  s3x4,   s_2x3,     1, 0};
  850.        map_thing map_4x4_ns            = {{12, 13, 0, 14},                {8, 6, 4, 5},                   {0}, {0}, MPKIND__NONE,        2,  s4x4,   s1x4,      0, 1};
  851.        map_thing map_4x4_ew            = {{0, 1, 4, 2},                   {12, 10, 8, 9},                 {0}, {0}, MPKIND__NONE,        2,  s4x4,   s1x4,      1, 1};
  852. static map_thing map_phantom_box       = {{0, 1, 6, 7, 8, 9, 14, 15},     {2, 3, 4, 5, 10, 11, 12, 13},   {0}, {0}, MPKIND__NONE,        2,  s2x8,   s2x4,      0, 0};
  853. static map_thing map_intlk_phantom_box = {{0, 1, 4, 5, 10, 11, 14, 15},   {2, 3, 6, 7, 8, 9, 12, 13},     {0}, {0}, MPKIND__INTLK,       2,  s2x8,   s2x4,      0, 0};
  854. static map_thing map_phantom_dmd       = {{0, 3, 4, 5, 8, 11, 12, 13},    {1, 2, 6, 7, 9, 10, 14, 15},    {0}, {0}, MPKIND__NONE,        2,  s_4dmd, s_qtag,    0, 0};
  855. static map_thing map_intlk_phantom_dmd = {{0, 2, 6, 7, 9, 11, 12, 13},    {1, 3, 4, 5, 8, 10, 14, 15},    {0}, {0}, MPKIND__INTLK,       2,  s_4dmd, s_qtag,    0, 0};
  856. static map_thing map_split_f           = {{13, 15, 11, 6, 8, 9, 10, 12},  {0, 1, 2, 4, 5, 7, 3, 14},      {0}, {0}, MPKIND__SPLIT,       2,  s4x4,   s2x4,      1, 0};
  857. static map_thing map_intlk_f           = {{14, 3, 7, 5, 8, 9, 10, 12},    {0, 1, 2, 4, 6, 11, 15, 13},    {0}, {0}, MPKIND__INTLK,       2,  s4x4,   s2x4,      1, 0};
  858. static map_thing map_full_f            = {{0, 1, 2, 4, 8, 9, 10, 12},     {14, 3, 7, 5, 6, 11, 15, 13},   {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  859. static map_thing map_stagger           = {{14, 1, 7, 4, 6, 9, 15, 12},    {0, 3, 2, 5, 8, 11, 10, 13},    {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  860. static map_thing map_stairst           = {{13, 1, 11, 4, 5, 9, 3, 12},    {0, 15, 2, 6, 8, 7, 10, 14},    {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  861. static map_thing map_ladder            = {{14, 3, 2, 4, 6, 11, 10, 12},   {0, 1, 7, 5, 8, 9, 15, 13},     {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  862. static map_thing map_but_o             = {{14, 1, 2, 5, 6, 9, 10, 13},    {0, 3, 7, 4, 8, 11, 15, 12},    {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  863. static map_thing map_o_s2x4_3          = {{14, 1, 2, 5, 6, 9, 10, 13},    {0, 3, 7, 4, 8, 11, 15, 12},    {0}, {0}, MPKIND__O_SPOTS,     2,  s4x4,   s2x4,      1, 0};
  864. static map_thing map_x_s2x4_3          = {{14, 1, 2, 5, 6, 9, 10, 13},    {0, 3, 7, 4, 8, 11, 15, 12},    {0}, {0}, MPKIND__X_SPOTS,     2,  s4x4,   s2x4,      1, 0};
  865. static map_thing map_o_s2x4_2          = {{10, 13, 14, 1, 2, 5, 6, 9},    {12, 15, 3, 0, 4, 7, 11, 8},    {0}, {0}, MPKIND__O_SPOTS,     2,  s4x4,   s2x4,      0, 0};
  866. static map_thing map_x_s2x4_2          = {{10, 13, 14, 1, 2, 5, 6, 9},    {12, 15, 3, 0, 4, 7, 11, 8},    {0}, {0}, MPKIND__X_SPOTS,     2,  s4x4,   s2x4,      0, 0};
  867.        map_thing map_offset            = {{13, 15, 2, 4, 5, 7, 10, 12},   {0, 1, 11, 6, 8, 9, 3, 14},     {0}, {0}, MPKIND__NONE,        2,  s4x4,   s2x4,      1, 0};
  868.        map_thing map_4x4v    = {{12, 10, 8, 9},        {13, 15, 6, 11},       {14, 3, 5, 7},       {0, 1, 4, 2},    MPKIND__SPLIT,       4,  s4x4,   s1x4,      1, 0};
  869. static map_thing map_blocks   = {{12, 14, 7, 9},       {13, 0, 2, 11},       {15, 1, 4, 6},      {10, 3, 5, 8},     MPKIND__NONE,        4,  s4x4,   s2x2,      0, 0};
  870. static map_thing map_trglblk  = {{12, 14, 15, 9},      {13, 0, 2, 3},        {7, 1, 4, 6},       {10, 11, 5, 8},    MPKIND__NONE,        4,  s4x4,   s2x2,      0, 0};
  871. static map_thing map_2x6_1x6           = {{11, 10, 9, 6, 7, 8},           {0, 1, 2, 5, 4, 3},             {0}, {0}, MPKIND__SPLIT,       2,  s2x6,   s_1x6,     0, 1};
  872. static map_thing map_2x8_1x8           = {{15, 14, 12, 13, 8, 9, 11, 10}, {0, 1, 3, 2, 7, 6, 4, 5},       {0}, {0}, MPKIND__SPLIT,       2,  s2x8,   s1x8,      0, 1};
  873. static map_thing map_1x16_1x8          = {{-1, -1, -1, -1, 2, 3, 0, 1},   {6, 7, 4, 5, -1, -1, -1, -1},   {0}, {0}, MPKIND__SPLIT,       2,  s1x8,   s1x8,      0, 0};
  874. static map_thing map_hv_2x4_2          = {{0, 1, 2, 3, 12, 13, 14, 15},   {4, 5, 6, 7, 8, 9, 10, 11},     {0}, {0}, MPKIND__SPLIT,       2,  s2x8,   s2x4,      0, 0};
  875. static map_thing map_3x4_2x3           = {{1, 11, 8, 9, 10, 0},           {3, 4, 6, 7, 5, 2},             {0}, {0}, MPKIND__SPLIT,       2,  s3x4,   s_2x3,     1, 0};
  876. static map_thing map_4x4_2x4v          = {{9, 11, 7, 2, 4, 5, 6, 8},      {12, 13, 14, 0, 1, 3, 15, 10},  {0}, {0}, MPKIND__SPLIT,       2,  s4x4,   s2x4,      0, 1};
  877. static map_thing map_4x4_2x4intv       = {{10, 15, 3, 1, 4, 5, 6, 8},     {12, 13, 14, 0, 2, 7, 11, 9},   {0}, {0}, MPKIND__SPLIT,       2,  s4x4,   s2x4,      0, 1};
  878. static map_thing map_2x4_2x2           = {{0, 1, 6, 7},                   {2, 3, 4, 5},                   {0}, {0}, MPKIND__SPLIT,       2,  s2x4,   s2x2,      0, 0};
  879. static map_thing map_2x3_1x3           = {{5, 4, 3},                      {0, 1, 2},                      {0}, {0}, MPKIND__SPLIT,       2,  s_2x3,  s_1x3,     0, 1};
  880. static map_thing map_2x4_1x4           = {{7, 6, 4, 5},                   {0, 1, 3, 2},                   {0}, {0}, MPKIND__SPLIT,       2,  s2x4,   s1x4,      0, 1};
  881. static map_thing map_qtg_dmd           = {{0, 7, 5, 6},                   {1, 2, 4, 3},                   {0}, {0}, MPKIND__SPLIT,       2,  s_qtag, sdmd,      1, 0};
  882. static map_thing map_ptp_dmd           = {{0, 1, 2, 3},                   {6, 7, 4, 5},                   {0}, {0}, MPKIND__SPLIT,       2,  s_ptpd, sdmd,      0, 0};
  883. static map_thing map_3dmd_dmd = {{0, 10, 8, 9},                  {1, 5, 7, 11},                 {2, 3, 6, 4},  {0}, MPKIND__SPLIT,       3,  s_3dmd, sdmd,      1, 0};
  884. static map_thing map_4x6_2x4  = {{1, 10, 19, 16, 17, 18, 11, 0}, {3, 8, 21, 14, 15, 20, 9, 2},
  885.                                                                  {5, 6, 23, 12, 13, 22, 7, 4},                 {0}, MPKIND__SPLIT,       3,  s4x6,   s2x4,      1, 0};
  886. static map_thing map_hv_qtg_2          = {{0, 1, 15, 14, 10, 11, 12, 13}, {2, 3, 4, 5, 8, 9, 7, 6},       {0}, {0}, MPKIND__SPLIT,       2,  s_4dmd, s_qtag,    0, 0};
  887. static map_thing map_1x6_1x3           = {{0, 1, 2},                      {5, 4, 3},                      {0}, {0}, MPKIND__SPLIT,       2,  s_1x6,  s_1x3,     0, 0};
  888. static map_thing map_1x8_1x4           = {{0, 1, 2, 3},                   {6, 7, 4, 5},                   {0}, {0}, MPKIND__SPLIT,       2,  s1x8,   s1x4,      0, 0};
  889. static map_thing map_1x12_1x4 = {{-1, -1, 1, 0},                 {3, 2, 7, 6},                  {5, 4, -1, -1},{0}, MPKIND__SPLIT,       3,  s1x8,   s1x4,      0, 0};
  890. static map_thing map_1x2_1x1 = {{0},                             {1},                           {0},           {0}, MPKIND__SPLIT,       2,  s_1x2,  s_1x1,     0, 0};
  891. static map_thing map_1x4_1x2 = {{0, 1},                          {3, 2},                        {0},           {0}, MPKIND__SPLIT,       2,  s1x4,   s_1x2,     0, 0};
  892. static map_thing map_2x6_2x2 = {{0, 1, 10, 11},                  {2, 3, 8, 9},                  {4, 5, 6, 7},  {0}, MPKIND__SPLIT,       3,  s2x6,   s2x2,      0, 0};
  893. static map_thing map_3x4_1x4 = {{9, 8, 6, 7},                    {10, 11, 4, 5},                {0, 1, 3, 2},  {0}, MPKIND__SPLIT,       3,  s3x4,   s1x4,      0, 1};
  894. static map_thing map_2x3_1x2 = {{0, 5},                          {1, 4},                        {2, 3},        {0}, MPKIND__SPLIT,       3,  s_2x3,  s_1x2,     1, 0};
  895. static map_thing map_1x6_1x2 = {{0, 1},                          {2, 5},                        {4, 3},        {0}, MPKIND__SPLIT,       3,  s_1x6,  s_1x2,     0, 0};
  896. static map_thing map_2x2h = {{3, 2},                             {0, 1},                        {0},           {0}, MPKIND__SPLIT,       2,  s2x2,   s_1x2,     0, 1};
  897. static map_thing map_2x4_2x2r = {{1, 6, 7, 0},                   {3, 4, 5, 2},                  {0},           {0}, MPKIND__SPLIT,       2,  s2x4,   s2x2,      1, 0};
  898. static map_thing map_2x6_2x2r = {{1, 10, 11, 0},                 {3, 8, 9, 2},                  {5, 6, 7, 4},  {0}, MPKIND__SPLIT,       3,  s2x6,   s2x2,      1, 0};
  899. static map_thing map_2x6_2x3           = {{0, 1, 2, 9, 10, 11},           {3, 4, 5, 6, 7, 8},             {0}, {0}, MPKIND__SPLIT,       2,  s2x6,   s_2x3,     0, 0};
  900. static map_thing map_4x4_1x4 = {{8, 6, 4, 5},        {9, 11, 2, 7},       {10, 15, 1, 3},       {12, 13, 0, 14},    MPKIND__SPLIT,       4,  s4x4,   s1x4,      0, 1};
  901. static map_thing map_2x8_2x2 = {{0, 1, 14, 15},      {2, 3, 12, 13},      {4, 5, 10, 11},       {6, 7, 8, 9},       MPKIND__SPLIT,       4,  s2x8,   s2x2,      0, 0};
  902. static map_thing map_4dmd_dmd = {{0, 13, 11, 12},    {1, 15, 10, 14},     {2, 6, 9, 7},         {3, 4, 8, 5},       MPKIND__SPLIT,       4,  s_4dmd, sdmd,      1, 0};
  903. static map_thing map_1x2_rmv           = {{0, 3},                         {1, 2},                         {0}, {0}, MPKIND__REMOVED,     2,  s1x4,   s_1x2,     0, 0};
  904. static map_thing map_1x2_rmvr          = {{0, 3},                         {1, 2},                         {0}, {0}, MPKIND__REMOVED,     2,  s2x2,   s_1x2,     1, 0};
  905. static map_thing map_2x2_rmv           = {{0, 2, 5, 7},                   {1, 3, 4, 6},                   {0}, {0}, MPKIND__REMOVED,     2,  s2x4,   s2x2,      0, 0};
  906. static map_thing map_1x4_rmv           = {{0, 3, 5, 6},                   {1, 2, 4, 7},                   {0}, {0}, MPKIND__REMOVED,     2,  s1x8,   s1x4,      0, 0};
  907. static map_thing map_1x4_rmvr          = {{7, 6, 4, 5},                   {0, 1, 3, 2},                   {0}, {0}, MPKIND__REMOVED,     2,  s2x4,   s1x4,      0, 1};
  908. static map_thing map_dmd_rmv           = {{6, 0, 3, 5},                   {7, 1, 2, 4},                   {0}, {0}, MPKIND__REMOVED,     2,  s_rigger, sdmd,    0, 0};
  909. static map_thing map_dmd_rmvr          = {{0, 3, 5, 6},                   {1, 2, 4, 7},                   {0}, {0}, MPKIND__REMOVED,     2,  s_qtag, sdmd,      1, 0};
  910.        map_thing map_ov_s2x4_k = {{13, 15, 11, 6, 8, 9, 10, 12}, {14, 3, 7, 5, 6, 11, 15, 13},
  911.                                   {0, 1, 2, 4, 5, 7, 3, 14},     {0},                                               MPKIND__OVERLAP,     3,  s4x4,   s2x4,      1, 0};
  912.        map_thing map_dbloff1   = {{0, 1, 3, 2, 4, 5, 7, 6},      {0},                           {0},           {0}, MPKIND__NONE,        1,  s2x4,   s_qtag,    0, 0};
  913.        map_thing map_dbloff2   = {{2, 3, 4, 5, 6, 7, 0, 1},      {0},                           {0},           {0}, MPKIND__NONE,        1,  s2x4,   s_qtag,    0, 0};
  914. static map_thing map_ov_1x4_2  = {{0, 1, 2, 3},                  {3, 2, 7, 6},                 {6, 7, 4, 5},   {0}, MPKIND__OVERLAP,     3,  s1x8,   s1x4,      0, 0};
  915. static map_thing map_ov_1x4_3  = {{9, 8, 6, 7},                  {10, 11, 4, 5},               {0, 1, 3, 2},   {1}, MPKIND__OVERLAP,     3,  s3x4,   s1x4,      0, 0};
  916. static map_thing map_ov_s2x2_2 = {{0, 1, 6, 7},                  {1, 2, 5, 6},                 {2, 3, 4, 5},   {0}, MPKIND__OVERLAP,     3,  s2x4,   s2x2,      0, 0};
  917. static map_thing map_ov_2x3_3  = {{1, 11, 8, 9, 10, 0},      {2, 5, 7, 8, 11, 1},     {3, 4, 6, 7, 5, 2},      {0}, MPKIND__OVERLAP,     3,  s3x4,   s_2x3,     1, 0};
  918. static map_thing map_ov_2x4_0  = {{0, 1, 2, 3, 8, 9, 10, 11},    {2, 3, 4, 5, 6, 7, 8, 9},     {0},            {0}, MPKIND__OVERLAP,     2,  s2x6,   s2x4,      0, 0};
  919. static map_thing map_ov_2x4_1          = {{10, 11, 5, 4, 6, 7, 8, 9},     {0, 1, 2, 3, 4, 5, 11, 10},     {0}, {0}, MPKIND__OVERLAP,     2,  s3x4,   s2x4,      0, 1};
  920. static map_thing map_ov_2x4_2  = {{0, 1, 2, 3, 12, 13, 14, 15},           {2, 3, 4, 5, 10, 11, 12, 13},
  921.                                   {4, 5, 6, 7, 8, 9, 10, 11},    {0},                                               MPKIND__OVERLAP,     3,  s2x8,   s2x4,      0, 0};
  922. static map_thing map_ov_2x4_3  = {{9, 11, 7, 2, 4, 5, 6, 8},     {10, 15, 3, 1, 2, 7, 11, 9},
  923.                                   {12, 13, 14, 0, 1, 3, 15, 10}, {0},                                               MPKIND__OVERLAP,     3,  s4x4,   s2x4,      0, 1};
  924. static map_thing map_ov_s1x8_0         = {{-1, -1, 1, 0, 7, 6, 3, 2},     {3, 2, 7, 6, -1, -1, 5, 4},     {0}, {0}, MPKIND__OVERLAP,     2,  s1x8,   s1x8,      0, 0};
  925. static map_thing map_ov_qtag_0         = {{0, 1, 5, 11, 7, 8, 9, 10},     {1, 2, 3, 4, 6, 7, 11, 5},      {0}, {0}, MPKIND__OVERLAP,     2,  s_3dmd, s_qtag,    0, 0};
  926. static map_thing map_ov_qtag_2 = {{0, 1, 15, 14, 10, 11, 12, 13},{1, 2, 6, 7, 9, 10, 14, 15},
  927.                                   {2, 3, 4, 5, 8, 9, 7, 6},      {0},                                               MPKIND__OVERLAP,     3,  s_4dmd, s_qtag,    0, 0};
  928.  
  929. /* Maps for turning triangles into boxes for the "triangle" concept. */
  930. /* Nonzero item in map3[1] for arity 1 map means do not reassemble. */
  931.        map_thing map_trngl_box1        = {{1, 2, -1, 0},                  {0},                         {0, 1}, {0}, MPKIND__NONE,        1,  s_trngl, s2x2,     0, 0};
  932.        map_thing map_trngl_box2        = {{1, 2, 0, -1},                  {0},                         {0, 1}, {0}, MPKIND__NONE,        1,  s_trngl, s2x2,     0, 0};
  933.  
  934. /* For maps with arity 1, a nonzero item in map3[0] means that the "offset goes away" warning should be given in certain cases. */
  935. /* For maps with arity 3, a nonzero item in map4[0] means that the "overlap goes away" warning should be given in certain cases. */
  936.  
  937. static map_thing map_lh_s1x4_3         = {{9, 8, 6, 7},                   {0, 1, 3, 2},                   {0}, {0}, MPKIND__OFFS_L_HALF, 2,  s2x6,   s1x4,      0, 1};
  938. static map_thing map_lh_s2x2_2         = {{10, 11, 8, 9},                 {2, 3, 4, 5},                   {0}, {0}, MPKIND__OFFS_L_HALF, 2,  s3x4,   s2x2,      0, 0};
  939. static map_thing map_lh_s2x2_3         = {{11, 8, 9, 10},                 {3, 4, 5, 2},                   {0}, {0}, MPKIND__OFFS_L_HALF, 2,  s3x4,   s2x2,      1, 0};
  940. static map_thing map_lh_s2x4_0         = {{0, 1, 2, 3, 6, 7, 8, 9},       {0},                            {0}, {0}, MPKIND__OFFS_L_HALF, 1,  s2x6,   s2x4,      0, 0};
  941. static map_thing map_lh_s2x4_1         = {{10, 11, 2, 3, 4, 5, 8, 9},     {0},                            {0}, {0}, MPKIND__OFFS_L_HALF, 1,  s3x4,   s2x4,      0, 1};
  942. static map_thing map_lh_s1x8_0         = {{0, 1, 2, 3, 4, 5, 6, 7},       {0},                            {1}, {0}, MPKIND__OFFS_L_HALF, 1,  s1x8,   s1x8,      0, 0};
  943.        map_thing map_lh_s2x3_3         = {{1, 2, 4, 5, 7, 3},             {13, 15, 11, 9, 10, 12},        {0}, {0}, MPKIND__OFFS_L_HALF, 2,  s4x4,   s_2x3,     1, 1};
  944.        map_thing map_lh_s2x3_2         = {{9, 11, 7, 5, 6, 8},            {13, 14, 0, 1, 3, 15},          {0}, {0}, MPKIND__OFFS_L_HALF, 2,  s4x4,   s_2x3,     0, 0};
  945.  
  946. static map_thing map_rh_s1x4_3         = {{11, 10, 8, 9},                 {2, 3, 5, 4},                   {0}, {0}, MPKIND__OFFS_R_HALF, 2,  s2x6,   s1x4,      0, 1};
  947. static map_thing map_rh_s2x2_2         = {{0, 1, 11, 10},                 {5, 4, 6, 7},                   {0}, {0}, MPKIND__OFFS_R_HALF, 2,  s3x4,   s2x2,      0, 0};
  948. static map_thing map_rh_s2x2_3         = {{1, 11, 10, 0},                 {4, 6, 7, 5},                   {0}, {0}, MPKIND__OFFS_R_HALF, 2,  s3x4,   s2x2,      1, 0};
  949. static map_thing map_rh_s2x4_0         = {{2, 3, 4, 5, 8, 9, 10, 11},     {0},                            {0}, {0}, MPKIND__OFFS_R_HALF, 1,  s2x6,   s2x4,      0, 0};
  950. static map_thing map_rh_s2x4_1         = {{0, 1, 5, 4, 6, 7, 11, 10},     {0},                            {0}, {0}, MPKIND__OFFS_R_HALF, 1,  s3x4,   s2x4,      0, 1};
  951. static map_thing map_rh_s1x8_0         = {{0, 1, 2, 3, 4, 5, 6, 7},       {0},                            {1}, {0}, MPKIND__OFFS_R_HALF, 1,  s1x8,   s1x8,      0, 0};
  952.        map_thing map_rh_s2x3_3         = {{15, 11, 6, 8, 9, 10},          {0, 1, 2, 7, 3, 14},            {0}, {0}, MPKIND__OFFS_R_HALF, 2,  s4x4,   s_2x3,     1, 1};
  953.        map_thing map_rh_s2x3_2         = {{12, 13, 14, 3, 15, 10},        {11, 7, 2, 4, 5, 6},            {0}, {0}, MPKIND__OFFS_R_HALF, 2,  s4x4,   s_2x3,     0, 0};
  954.  
  955. static map_thing map_lf_s1x4_3         = {{11, 10, 8, 9},                 {0, 1, 3, 2},                   {0}, {0}, MPKIND__OFFS_L_FULL, 2,  s2x8,   s1x4,      0, 1};
  956. static map_thing map_lf_s2x2_2         = {{9, 11, 6, 8},                  {14, 0, 1, 3},                  {0}, {0}, MPKIND__OFFS_L_FULL, 2,  s4x4,   s2x2,      0, 0};
  957. static map_thing map_lf_s2x2_3         = {{11, 6, 8, 9},                  {0, 1, 3, 14},                  {0}, {0}, MPKIND__OFFS_L_FULL, 2,  s4x4,   s2x2,      1, 0};
  958. static map_thing map_lf_s2x4_0         = {{0, 1, 2, 3, 8, 9, 10, 11},     {0},                            {0}, {0}, MPKIND__OFFS_L_FULL, 1,  s2x8,   s2x4,      0, 0};
  959. static map_thing map_lf_s2x4_1         = {{13, 15, 2, 4, 5, 7, 10, 12},   {0},                            {0}, {0}, MPKIND__OFFS_L_FULL, 1,  s4x4,   s2x4,      1, 0};
  960. static map_thing map_lf_s1x8_0         = {{0, 1, 2, 3, 4, 5, 6, 7},       {0},                            {1}, {0}, MPKIND__OFFS_L_FULL, 1,  s1x8,   s1x8,      0, 0};
  961.  
  962. static map_thing map_rf_s1x4_3         = {{15, 14, 12, 13},               {4, 5, 7, 6},                   {0}, {0}, MPKIND__OFFS_R_FULL, 2,  s2x8,   s1x4,      0, 1};
  963. static map_thing map_rf_s2x2_2         = {{12, 13, 15, 10},               {7, 2, 4, 5},                   {0}, {0}, MPKIND__OFFS_R_FULL, 2,  s4x4,   s2x2,      0, 0};
  964. static map_thing map_rf_s2x2_3         = {{13, 15, 10, 12},               {2, 4, 5, 7},                   {0}, {0}, MPKIND__OFFS_R_FULL, 2,  s4x4,   s2x2,      1, 0};
  965. static map_thing map_rf_s2x4_0         = {{4, 5, 6, 7, 12, 13, 14, 15},   {0},                            {0}, {0}, MPKIND__OFFS_R_FULL, 1,  s2x8,   s2x4,      0, 0};
  966. static map_thing map_rf_s2x4_1         = {{0, 1, 11, 6, 8, 9, 3, 14},     {0},                            {0}, {0}, MPKIND__OFFS_R_FULL, 1,  s4x4,   s2x4,      1, 0};
  967. static map_thing map_rf_s1x8_0         = {{0, 1, 2, 3, 4, 5, 6, 7},       {0},                            {1}, {0}, MPKIND__OFFS_R_FULL, 1,  s1x8,   s1x8,      0, 0};
  968.        map_thing map_lf_s2x4_r         = {{9, 11, 14, 0, 1, 3, 6, 8},     {0},                            {0}, {0}, MPKIND__OFFS_L_FULL, 1,  s4x4,   s2x4,      0, 1};
  969.        map_thing map_rf_s2x4_r         = {{12, 13, 7, 2, 4, 5, 15, 10},   {0},                            {0}, {0}, MPKIND__OFFS_R_FULL, 1,  s4x4,   s2x4,      0, 1};
  970.  
  971. static map_thing map_blob_1x4a = {{13, 10, 6, 8},                {15, 17, 3, 5},            {18, 20, 1, 22},   {0}, MPKIND__NONE,        3,  s_bigblob,   s1x4, 0, 1};
  972. static map_thing map_blob_1x4b = {{19, 16, 12, 14},              {21, 23, 9, 11},           {0, 2, 7, 4},      {0}, MPKIND__NONE,        3,  s_bigblob,   s1x4, 0, 1};
  973. static map_thing map_blob_1x4c = {{1, 22, 18, 20},               {3, 5, 15, 17},            {6, 8, 13, 10},    {0}, MPKIND__NONE,        3,  s_bigblob,   s1x4, 1, 0};
  974. static map_thing map_blob_1x4d = {{19, 16, 12, 14},              {21, 23, 9, 11},           {0, 2, 7, 4},      {0}, MPKIND__NONE,        3,  s_bigblob,   s1x4, 1, 0};
  975. static map_thing map_wblob_1x4a        = {{15, 17, 5, 3, 6, 8, 10, 13},   {18, 20, 22, 1, 3, 5, 17, 15},  {0}, {0}, MPKIND__NONE,        2,  s_bigblob,   s2x4, 0, 1};
  976. static map_thing map_wblob_1x4b        = {{21, 23, 11, 9, 12, 14, 16, 19},{0, 2, 4, 7, 9, 11, 23, 21},    {0}, {0}, MPKIND__NONE,        2,  s_bigblob,   s2x4, 0, 1};
  977. static map_thing map_wblob_1x4c        = {{3, 5, 17, 15, 18, 20, 22, 1},  {6, 8, 10, 13, 15, 17, 5, 3},   {0}, {0}, MPKIND__NONE,        2,  s_bigblob,   s2x4, 1, 0};
  978. static map_thing map_wblob_1x4d        = {{21, 23, 11, 9, 12, 14, 16, 19},{0, 2, 4, 7, 9, 11, 23, 21},    {0}, {0}, MPKIND__NONE,        2,  s_bigblob,   s2x4, 1, 0};
  979.  
  980. static map_thing map_4quads1  = {{0, 2},               {4, 6},               {10, 8},            {14, 12},          MPKIND__4_QUADRANTS, 4,  s_c1phan,    s_1x2,0, 0};
  981. static map_thing map_4quads2  = {{1, 3},               {7, 5},               {11, 9},            {13, 15},          MPKIND__4_QUADRANTS, 4,  s_c1phan,    s_1x2,1, 0};
  982.  
  983. static map_thing map_dmd1     = {{0, 2},               {1, 3},               {0},                {0},               MPKIND__DMD_STUFF,   2,  sdmd,        s_1x2,0, 0};
  984. static map_thing map_dmd2     = {{1, 3},               {0, 2},               {0},                {0},               MPKIND__DMD_STUFF,   2,  sdmd,        s_1x2,1, 0};
  985.  
  986.        map_thing *maps_3diag[4] = {&map_blob_1x4c, &map_blob_1x4a, &map_blob_1x4d, &map_blob_1x4b};
  987.        map_thing *maps_3diagwk[4] = {&map_wblob_1x4a, &map_wblob_1x4c, &map_wblob_1x4b, &map_wblob_1x4d};
  988.        
  989. /* Beware!!  These items must be keyed to definition of "mpkind" in sd.h as follows:
  990.                     split
  991.                     |        removed
  992.                     |        |        overlap
  993.                     |        |        |        intlk
  994.                     |        |        |        |        l_half
  995.                     |        |        |        |        |        r_half
  996.                     |        |        |        |        |        |        l_full
  997.                     |        |        |        |        |        |        |        r_full
  998.                     |        |        |        |        |        |        |        |        o_spots
  999.                     |        |        |        |        |        |        |        |        |        x_spots
  1000.                     |        |        |        |        |        |        |        |        |        |        4quads
  1001.                     |        |        |        |        |        |        |        |        |        |        |        diamond
  1002.                     |        |        |        |        |        |        |        |        |        |        |        |
  1003.                     |        |        |        |        |        |        |        |        |        |        |        | */
  1004. static map_hunk mm_1x8_1 = {{0, 0},
  1005.                     {0, 0},  {0, 0},  {0, 0},  {0, 0},  {&map_lh_s1x8_0, 0},
  1006.                                                                  {&map_rh_s1x8_0, 0},
  1007.                                                                           {&map_lf_s1x8_0, 0},
  1008.                                                                                    {&map_rf_s1x8_0, 0},
  1009.                                                                                             {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1010.        
  1011. static map_hunk mm_2x4_1 = {{0, 0},
  1012.                     {0, 0},  {0, 0},  {0, 0},  {0, 0},  {&map_lh_s2x4_0, &map_lh_s2x4_1},
  1013.                                                                  {&map_rh_s2x4_0, &map_rh_s2x4_1},
  1014.                                                                           {&map_lf_s2x4_0, &map_lf_s2x4_1},
  1015.                                                                                    {&map_rf_s2x4_0, &map_rf_s2x4_1},
  1016.                                                                                             {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1017.        
  1018. static map_hunk mm_1x1_2 = {{0, 0},
  1019.                     {&map_1x2_1x1, &map_1x2_1x1},
  1020.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1021.        
  1022. static map_hunk mm_1x2_2 = {{0, 0},
  1023.                     {&map_1x4_1x2, &map_2x2h},
  1024.                              {&map_1x2_rmv, &map_1x2_rmvr},
  1025.                                       {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {&map_dmd1, &map_dmd2}};
  1026.        
  1027. static map_hunk mm_2x2_2 = {{0, 0},
  1028.                     {&map_2x4_2x2, &map_2x4_2x2r},
  1029.                              {&map_2x2_rmv, 0},
  1030.                                       {0, 0},  {0, 0},  {&map_lh_s2x2_2, &map_lh_s2x2_3},
  1031.                                                                  {&map_rh_s2x2_2, &map_rh_s2x2_3},
  1032.                                                                           {&map_lf_s2x2_2, &map_lf_s2x2_3},
  1033.                                                                                    {&map_rf_s2x2_2, &map_rf_s2x2_3},
  1034.                                                                                             {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1035.        
  1036. static map_hunk mm_dmd_2 = {{0, 0},
  1037.                     {&map_ptp_dmd, &map_qtg_dmd},
  1038.                              {&map_dmd_rmv, &map_dmd_rmvr},
  1039.                                       {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1040.        
  1041. static map_hunk mm_tgl_2 = {{0, 0},
  1042.                     {0, &map_s6_trngl},
  1043.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1044.        
  1045. static map_hunk mm_qtg_2 = {{0, 0},
  1046.                     {&map_hv_qtg_2, 0},
  1047.                              {0, 0},  {&map_ov_qtag_0, 0},
  1048.                                                {&map_intlk_phantom_dmd, 0},
  1049.                                                         {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1050.        
  1051. static map_hunk mm_1x3_2 = {{0, 0},
  1052.                     {&map_1x6_1x3, &map_2x3_1x3},
  1053.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1054.        
  1055. static map_hunk mm_1x4_2 = {{0, 0},
  1056.                     {&map_1x8_1x4, &map_2x4_1x4},
  1057.                              {&map_1x4_rmv, &map_1x4_rmvr},
  1058.                                       {0, 0},  {0, 0},  {0, &map_lh_s1x4_3},
  1059.                                                                  {0, &map_rh_s1x4_3},
  1060.                                                                           {0, &map_lf_s1x4_3},
  1061.                                                                                    {0, &map_rf_s1x4_3},
  1062.                                                                                             {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1063.        
  1064. static map_hunk mm_1x8_2 = {{0, 0},
  1065.                     {&map_1x16_1x8, &map_2x8_1x8},
  1066.                              {0, 0},  {&map_ov_s1x8_0, 0},
  1067.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1068.  
  1069. static map_hunk mm_2x4_2 = {{0, 0},
  1070.                     {&map_hv_2x4_2, &map_4x4_2x4v},
  1071.                              {0, 0},  {&map_ov_2x4_0, &map_ov_2x4_1},
  1072.                                                {&map_intlk_phantom_box, &map_4x4_2x4intv},
  1073.                                                         {0, 0},  {0, 0},  {0, 0},  {0, 0},  {&map_o_s2x4_2, &map_o_s2x4_3},
  1074.                                                                                                      {&map_x_s2x4_2, &map_x_s2x4_3},
  1075.                                                                                                               {0, 0},  {0, 0}};
  1076.        
  1077. static map_hunk mm_2x3_2 = {{0, 0},
  1078.                     {&map_2x6_2x3, &map_3x4_2x3},
  1079.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1080.  
  1081. static map_hunk mm_2x3_3 = {{0, 0},
  1082.                     {0, 0},  {0, 0},  {0, &map_ov_2x3_3},
  1083.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1084.  
  1085. static map_hunk mm_1x6_2 = {{0, 0},
  1086.                     {0, &map_2x6_1x6},
  1087.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1088.        
  1089. static map_hunk mm_1x2_3 = {{0, 0},
  1090.                     {&map_1x6_1x2, &map_2x3_1x2},
  1091.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1092.        
  1093. static map_hunk mm_2x2_3 = {{0, 0},
  1094.                     {&map_2x6_2x2, &map_2x6_2x2r},
  1095.                              {0, 0},  {&map_ov_s2x2_2, 0},
  1096.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1097.        
  1098. static map_hunk mm_dmd_3 = {{0, 0},
  1099.                     {0, &map_3dmd_dmd},
  1100.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1101.        
  1102. static map_hunk mm_qtg_3 = {{0, 0},
  1103.                     {0, 0},  {0, 0},  {&map_ov_qtag_2, 0},
  1104.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1105.        
  1106. static map_hunk mm_1x4_3 = {{0, 0},
  1107.                     {&map_1x12_1x4, &map_3x4_1x4},
  1108.                              {0, 0},  {&map_ov_1x4_2, &map_ov_1x4_3},
  1109.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1110.        
  1111. static map_hunk mm_2x4_3 = {{0, 0},
  1112.                     {0, &map_4x6_2x4},
  1113.                              {0, 0},  {&map_ov_2x4_2, &map_ov_2x4_3},
  1114.                                                {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1115.        
  1116. static map_hunk mm_1x2_4 = {{0, 0},
  1117.                     {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {&map_4quads1, &map_4quads2},
  1118.                                                                                                                        {0, 0}};
  1119.        
  1120. static map_hunk mm_2x2_4 = {{0, 0},
  1121.                     {&map_2x8_2x2, 0},
  1122.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1123.        
  1124. static map_hunk mm_dmd_4 = {{0, 0},
  1125.                     {0, &map_4dmd_dmd},
  1126.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1127.        
  1128. static map_hunk mm_1x4_4 = {{0, 0},
  1129.                     {0, &map_4x4_1x4},
  1130.                              {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0},  {0, 0}};
  1131.  
  1132.  
  1133.  
  1134. /* BEWARE!!  This list is keyed to the definition of "setup_kind" in database.h. */
  1135. map_hunk *map_lists[][4] = {
  1136.    {0,         0,         0,         0},          /* nothing */
  1137.    {0,         &mm_1x1_2, 0,         0},          /* s_1x1 */
  1138.    {0,         &mm_1x2_2, &mm_1x2_3, &mm_1x2_4},  /* s_1x2 */
  1139.    {0,         &mm_1x3_2, 0,         0},          /* s_1x3 */
  1140.    {0,         &mm_2x2_2, &mm_2x2_3, &mm_2x2_4},  /* s2x2 */
  1141.    {0,         &mm_dmd_2, &mm_dmd_3, &mm_dmd_4},  /* sdmd */
  1142.    {0,         0,         0,         0},          /* s_star */
  1143.    {0,         &mm_tgl_2, 0,         0},          /* s_trngl */
  1144.    {0,         0,         0,         0},          /* s_bone6 */
  1145.    {0,         0,         0,         0},          /* s_short6 */
  1146.    {0,         &mm_qtg_2, &mm_qtg_3, 0},          /* s_qtag */
  1147.    {0,         0,         0,         0},          /* s_bone */
  1148.    {0,         0,         0,         0},          /* s_rigger */
  1149.    {0,         0,         0,         0},          /* s_spindle */
  1150.    {0,         0,         0,         0},          /* s_hrglass */
  1151.    {0,         0,         0,         0},          /* s_hyperglass */
  1152.    {0,         0,         0,         0},          /* s_crosswave */
  1153.    {0,         &mm_1x4_2, &mm_1x4_3, &mm_1x4_4},  /* s1x4 */
  1154.    {&mm_1x8_1, &mm_1x8_2, 0,         0},          /* s1x8 */
  1155.    {&mm_2x4_1, &mm_2x4_2, &mm_2x4_3, 0},          /* s2x4 */
  1156.    {0,         &mm_2x3_2, &mm_2x3_3, 0},          /* s_2x3 */
  1157.    {0,         &mm_1x6_2, 0,         0},          /* s_1x6 */
  1158.    {0,         0,         0,         0},          /* s3x4 */
  1159.    {0,         0,         0,         0},          /* s2x6 */
  1160.    {0,         0,         0,         0},          /* s2x8 */
  1161.    {0,         0,         0,         0},          /* s4x4 */
  1162.    {0,         0,         0,         0},          /* s_c1phan */
  1163.    {0,         0,         0,         0},          /* s_bigblob */
  1164.    {0,         0,         0,         0},          /* s_ptpd */
  1165.    {0,         0,         0,         0},          /* s_3x1dmd */
  1166.    {0,         0,         0,         0},          /* s_3dmd */
  1167.    {0,         0,         0,         0},          /* s_4dmd */
  1168.    {0,         0,         0,         0},          /* s_concstar */
  1169.    {0,         0,         0,         0},          /* s_concstar12 */
  1170.    {0,         0,         0,         0},          /* s_concstar16 */
  1171.    {0,         0,         0,         0},          /* s_galaxy */
  1172.    {0,         0,         0,         0},          /* s4x6 */
  1173.    {0,         0,         0,         0},          /* s_thar */
  1174.    {0,         0,         0,         0}};         /* s_normal_concentric */
  1175.  
  1176.  
  1177.  
  1178. concept_descriptor special_magic = {"MAGIC DIAMOND,", concept_magic, l_dontshow, {0, 1}};
  1179. concept_descriptor special_interlocked = {"INTERLOCKED DIAMOND,", concept_interlocked, l_dontshow, {0, 1}};
  1180.  
  1181.  
  1182. concept_descriptor mark_end_of_list = {"????", marker_end_of_list, l_dontshow};
  1183. concept_descriptor marker_decline = {"decline???", concept_mod_declined, l_dontshow};
  1184. concept_descriptor marker_concept_mod = {">>MODIFIED BY<<", concept_another_call_next_mod, l_dontshow};
  1185. concept_descriptor marker_concept_modreact = {">>REACTION MODIFIED BY<<", concept_another_call_next_modreact, l_dontshow};
  1186. concept_descriptor marker_concept_modtag = {">>TAG ENDING MODIFIED BY<<", concept_another_call_next_modtag, l_dontshow};
  1187. concept_descriptor marker_concept_force = {">>FORCIBLY MODIFIED BY<<", concept_another_call_next_force, l_dontshow};
  1188. concept_descriptor marker_concept_comment = {"{{COMMENT, l_dontshow}, l_dontshow}", concept_comment, l_dontshow};
  1189.  
  1190.  
  1191. /* The meaning of the arguments to concepts is as follows:
  1192.  
  1193. concept_tandem             arg1 = selector used (vs. everyone involved); arg2 = twosome; arg3 = phantom; arg4 = tandem=0 couples=1 siamese=2
  1194. concept_some_are_tandem       same as concept_tandem
  1195. concept_phantom_tandem        same as concept_tandem
  1196. concept_phantom_2x8_tandem    same as concept_tandem
  1197.  
  1198. */
  1199.  
  1200.  
  1201. /* **** BEWARE!!!!  These things are keyed to "concept_descriptor_table"
  1202.    (just below) and tell how to divide things into the various menus and popups.
  1203.    BE CAREFUL!! */
  1204.  
  1205. #define pp__1 35
  1206. #define pp__2 37
  1207. #define pp__3 37
  1208. #define pp__4 32
  1209. #define pp__z (pp__1+pp__2+pp__3+pp__4)
  1210.  
  1211. #define tt__1 9
  1212. #define tt__2 9
  1213. #define tt__z (tt__1+tt__2)
  1214.  
  1215. #define dd__1 10
  1216. #define dd__2 8
  1217. #define dd__3 9
  1218. #define dd__4 4
  1219. #define dd__z (dd__1+dd__2+dd__3+dd__4)
  1220.  
  1221. #define d4__1 6
  1222. #define d4__2 5
  1223. #define d4__3 6
  1224. #define d4__4 4
  1225. #define d4__z (d4__1+d4__2+d4__3+d4__4)
  1226.  
  1227. #define mm__1 11
  1228. #define mm__2 10
  1229. #define mm__3 33
  1230. #define mm__4 32
  1231.  
  1232. static int phantom_sizes[]       = {pp__1, pp__2, pp__3, pp__4, -1};
  1233. static int tandem_sizes[]        = {tt__1, tt__2,               -1};
  1234. static int distort_sizes[]       = {dd__1, dd__2, dd__3, dd__4, -1};
  1235. static int dist4_sizes[]         = {d4__1, d4__2, d4__3, d4__4, -1};
  1236. static int misc_c_sizes[]        = {mm__1, mm__2, mm__3, mm__4, -1};
  1237.  
  1238. static int phantom_offsets[] = {0,
  1239.                                 0 + pp__1,
  1240.                                 0 + pp__1 + pp__2,
  1241.                                 0 + pp__1 + pp__2 + pp__3};
  1242.  
  1243. static int tandem_offsets[]  = {0 + pp__z,
  1244.                                 0 + pp__z + tt__1};
  1245.  
  1246. static int distort_offsets[] = {0 + pp__z + tt__z,
  1247.                                 0 + pp__z + tt__z + dd__1,
  1248.                                 0 + pp__z + tt__z + dd__1 + dd__2,
  1249.                                 0 + pp__z + tt__z + dd__1 + dd__2 + dd__3};
  1250.  
  1251. static int dist4_offsets[]   = {0 + pp__z + tt__z + dd__z,
  1252.                                 0 + pp__z + tt__z + dd__z + d4__1,
  1253.                                 0 + pp__z + tt__z + dd__z + d4__1 + d4__2,
  1254.                                 0 + pp__z + tt__z + dd__z + d4__1 + d4__2 + d4__3};
  1255.  
  1256. static int misc_c_offsets[]  = {0 + pp__z + tt__z + dd__z + d4__z,
  1257.                                 0 + pp__z + tt__z + dd__z + d4__z + mm__1,
  1258.                                 0 + pp__z + tt__z + dd__z + d4__z + mm__1 + mm__2,
  1259.                                 0 + pp__z + tt__z + dd__z + d4__z + mm__1 + mm__2 + mm__3};
  1260. int general_concept_offset   =  0 + pp__z + tt__z + dd__z + d4__z + mm__1 + mm__2 + mm__3 + mm__4;
  1261.  
  1262. int general_concept_size;           /* Gets filled in during initialization. */
  1263.  
  1264. int *concept_offset_tables[] = {
  1265.    phantom_offsets,
  1266.    tandem_offsets,
  1267.    distort_offsets,
  1268.    dist4_offsets,
  1269.    misc_c_offsets,
  1270.    0};
  1271.  
  1272. int *concept_size_tables[] = {
  1273.    phantom_sizes,
  1274.    tandem_sizes,
  1275.    distort_sizes,
  1276.    dist4_sizes,
  1277.    misc_c_sizes,
  1278.    0};
  1279.  
  1280. char *concept_menu_strings[] = {
  1281.    "PHANTOM SETUP concepts",
  1282.    "COUPLES/TANDEM concepts",
  1283.    "DISTORTED SETUP concepts",
  1284.    "4-PERSON DISTORTED concepts",
  1285.    "MISCELLANEOUS concepts",
  1286.    0};
  1287.  
  1288. /* **** BEWARE!!!!  These are indices into "concept_descriptor_table"
  1289.    (just below) for SPLIT PHANTOM LINES, SPLIT PHANTOM COLUMNS,
  1290.    INTERLOCKED PHANTOM LINES, and INTERLOCKED PHANTOM COLUMNS.
  1291.    We use the fact that they are the first two items in the
  1292.    first two columns. */
  1293.  
  1294. int nice_setup_concept[] = {0, pp__1, 1, pp__1+1};
  1295.  
  1296. callspec_block **main_call_lists[NUM_CALL_LIST_KINDS];
  1297. int number_of_calls[NUM_CALL_LIST_KINDS];
  1298. level calling_level;
  1299.  
  1300. /* **** BEWARE!!!!  Four concepts must be at positions indicated in "nice_setup_concept"
  1301.    (just above) */
  1302.  
  1303. concept_descriptor concept_descriptor_table[] = {
  1304.  
  1305. /* phantom concepts */
  1306.  
  1307.    {"SPLIT PHANTOM LINES",                   concept_do_phantom_2x4,        l_c3a, {&(map_split_f), phantest_impossible, 1}},
  1308.    {"INTERLOCKED PHANTOM LINES",             concept_do_phantom_2x4,        l_c3, {&(map_intlk_f), phantest_impossible, 1}},
  1309.    {"PHANTOM LINES",                         concept_do_phantom_2x4,        l_c3a, {&(map_full_f), phantest_first_or_both, 1}},
  1310.          {"", concept_comment, l_nonexistent_concept},
  1311.    {"12 MATRIX SPLIT PHANTOM LINES",         concept_do_phantom_2x3,        l_c3a, {&(map_3x4_2x3), phantest_impossible, 1}},
  1312.    {"12 MATRIX INTERLOCKED PHANTOM LINES",   concept_do_phantom_2x3,        l_c3, {&(map_3x4_2x3_intlk), phantest_impossible, 1}},
  1313.    {"12 MATRIX PHANTOM LINES",               concept_do_phantom_2x3,        l_c3a, {&(map_3x4_2x3_conc), phantest_first_or_both, 1}},
  1314.          {"", concept_comment, l_nonexistent_concept},
  1315.    {"DIVIDED LINES",                         concept_divided_2x4,           l_c4, {&(map_hv_2x4_2), phantest_impossible, 1}},
  1316.    {"12 MATRIX DIVIDED LINES",               concept_divided_2x3,           l_c4, {&(map_2x6_2x3), phantest_impossible, 1}},
  1317.          {"", concept_comment, l_nonexistent_concept},
  1318.    {"TWO PHANTOM LINES OF 8",                concept_do_phantom_1x8,        l_c3, {0, phantest_impossible, TRUE, 1}},
  1319.    {"TWO PHANTOM LINES OF 6",                concept_do_phantom_1x6,        l_c3, {0, phantest_impossible, TRUE, 1}},
  1320.          {"", concept_comment, l_nonexistent_concept},
  1321.    {"TRIPLE LINES",                          concept_triple_lines,          l_c2, {0, 1}},
  1322.          {"", concept_comment, l_nonexistent_concept},
  1323.          {"", concept_comment, l_nonexistent_concept},
  1324.    {"TRIPLE LINES WORKING FORWARD",          concept_triple_lines_together, l_c3x, {0, 0, 1}},
  1325.    {"TRIPLE LINES WORKING BEHIND",           concept_triple_lines_together, l_c3x, {0, 2, 1}},
  1326.          {"", concept_comment, l_nonexistent_concept},
  1327.          {"", concept_comment, l_nonexistent_concept},
  1328.          {"", concept_comment, l_nonexistent_concept},
  1329.    {"TRIPLE DIAGONAL LINES",                 concept_triple_diag,           l_c4, {0, 1}},
  1330.    {"TRIPLE DIAGONAL LINES WORKING FORWARD", concept_triple_diag_together,  l_c4, {0, 0, 1}},
  1331.    {"TRIPLE DIAGONAL LINES WORKING BEHIND",  concept_triple_diag_together,  l_c4, {0, 2, 1}},
  1332.          {"", concept_comment, l_nonexistent_concept},
  1333.          {"", concept_comment, l_nonexistent_concept},
  1334.          {"", concept_comment, l_nonexistent_concept},
  1335.    {"TRIPLE TWIN LINES",                     concept_triple_twin,           l_c4a, {&(map_4x6_2x4), 0}},
  1336.          {"", concept_comment, l_nonexistent_concept},
  1337.    {"QUADRUPLE LINES",                       concept_quad_lines,            l_c4a, {0, 1}},
  1338.          {"", concept_comment, l_nonexistent_concept},
  1339.          {"", concept_comment, l_nonexistent_concept},
  1340.    {"QUADRUPLE LINES WORKING FORWARD",       concept_quad_lines_together,   l_c4a, {0, 0, 1}},
  1341.    {"QUADRUPLE LINES WORKING BEHIND",        concept_quad_lines_together,   l_c4a, {0, 2, 1}},
  1342. /* -------- column break -------- */
  1343.    {"SPLIT PHANTOM COLUMNS",                 concept_do_phantom_2x4,        l_c3a, {&(map_split_f), phantest_impossible, 0}},
  1344.    {"INTERLOCKED PHANTOM COLUMNS",           concept_do_phantom_2x4,        l_c3, {&(map_intlk_f), phantest_impossible, 0}},
  1345.    {"PHANTOM COLUMNS",                       concept_do_phantom_2x4,        l_c3a, {&(map_full_f), phantest_first_or_both, 0}},
  1346.          {"", concept_comment, l_nonexistent_concept},
  1347.    {"12 MATRIX SPLIT PHANTOM COLUMNS",       concept_do_phantom_2x3,        l_c3a, {&(map_3x4_2x3), phantest_impossible, 0}},
  1348.    {"12 MATRIX INTERLOCKED PHANTOM COLUMNS", concept_do_phantom_2x3,        l_c3, {&(map_3x4_2x3_intlk), phantest_impossible, 0}},
  1349.    {"12 MATRIX PHANTOM COLUMNS",             concept_do_phantom_2x3,        l_c3a, {&(map_3x4_2x3_conc), phantest_first_or_both, 0}},
  1350.          {"", concept_comment, l_nonexistent_concept},
  1351.    {"DIVIDED COLUMNS",                       concept_divided_2x4,           l_c4, {&(map_hv_2x4_2), phantest_impossible, 0}},
  1352.    {"12 MATRIX DIVIDED COLUMNS",             concept_divided_2x3,           l_c4, {&(map_2x6_2x3), phantest_impossible, 0}},
  1353.          {"", concept_comment, l_nonexistent_concept},
  1354.    {"TWO PHANTOM COLUMNS OF 8",              concept_do_phantom_1x8,        l_c3, {0, phantest_impossible, TRUE, 0}},
  1355.    {"TWO PHANTOM COLUMNS OF 6",              concept_do_phantom_1x6,        l_c3, {0, phantest_impossible, TRUE, 0}},
  1356.          {"", concept_comment, l_nonexistent_concept},
  1357.    {"TRIPLE COLUMNS",                        concept_triple_lines,          l_c3x, {0, 0}},
  1358.          {"", concept_comment, l_nonexistent_concept},
  1359.          {"", concept_comment, l_nonexistent_concept},
  1360.          {"", concept_comment, l_nonexistent_concept},
  1361.          {"", concept_comment, l_nonexistent_concept},
  1362.    {"TRIPLE COLUMNS WORKING RIGHT",          concept_triple_lines_together, l_c3x, {0, 3, 0}},
  1363.    {"TRIPLE COLUMNS WORKING LEFT",           concept_triple_lines_together, l_c3x, {0, 1, 0}},
  1364.          {"", concept_comment, l_nonexistent_concept},
  1365.    {"TRIPLE DIAGONAL COLUMNS",               concept_triple_diag,           l_c4, {0, 0}},
  1366.          {"", concept_comment, l_nonexistent_concept},
  1367.          {"", concept_comment, l_nonexistent_concept},
  1368.    {"TRIPLE DIAGONAL COLUMNS WORKING RIGHT", concept_triple_diag_together,  l_c4, {0, 3, 0}},
  1369.    {"TRIPLE DIAGONAL COLUMNS WORKING LEFT",  concept_triple_diag_together,  l_c4, {0, 1, 0}},
  1370.          {"", concept_comment, l_nonexistent_concept},
  1371.    {"TRIPLE TWIN COLUMNS",                   concept_triple_twin,           l_c4a, {&(map_4x6_2x4), 1}},
  1372.          {"", concept_comment, l_nonexistent_concept},
  1373.    {"QUADRUPLE COLUMNS",                     concept_quad_lines,            l_c4a, {0, 0}},
  1374.          {"", concept_comment, l_nonexistent_concept},
  1375.          {"", concept_comment, l_nonexistent_concept},
  1376.          {"", concept_comment, l_nonexistent_concept},
  1377.          {"", concept_comment, l_nonexistent_concept},
  1378.    {"QUADRUPLE COLUMNS WORKING RIGHT",       concept_quad_lines_together,   l_c4a, {0, 3, 0}},
  1379.    {"QUADRUPLE COLUMNS WORKING LEFT",        concept_quad_lines_together,   l_c4a, {0, 1, 0}},
  1380. /* -------- column break -------- */
  1381.    {"SPLIT PHANTOM BOXES",                   concept_do_phantom_boxes,      l_c4a, {&(map_hv_2x4_2), phantest_impossible}},
  1382.    {"INTERLOCKED PHANTOM BOXES",             concept_do_phantom_boxes,      l_c4, {&(map_intlk_phantom_box), phantest_impossible}},
  1383.    {"PHANTOM BOXES",                         concept_do_phantom_boxes,      l_c4a, {&(map_phantom_box), phantest_first_or_both}},
  1384.          {"", concept_comment, l_nonexistent_concept},
  1385.          {"", concept_comment, l_nonexistent_concept},
  1386.          {"", concept_comment, l_nonexistent_concept},
  1387.          {"", concept_comment, l_nonexistent_concept},
  1388.          {"", concept_comment, l_nonexistent_concept},
  1389.          {"", concept_comment, l_nonexistent_concept},
  1390.          {"", concept_comment, l_nonexistent_concept},
  1391.          {"", concept_comment, l_nonexistent_concept},
  1392.          {"", concept_comment, l_nonexistent_concept},
  1393.          {"", concept_comment, l_nonexistent_concept},
  1394.          {"", concept_comment, l_nonexistent_concept},
  1395.    {"TRIPLE BOXES",                          concept_triple_boxes,          l_c2},
  1396.    {"TRIPLE BOXES WORKING TOGETHER",         concept_triple_boxes_together, l_c3x, {0, 8, 0}},
  1397.    {"TRIPLE BOXES WORKING APART",            concept_triple_boxes_together, l_c3x, {0, 9, 0}},
  1398.    {"TRIPLE BOXES WORKING FORWARD",          concept_triple_boxes_together, l_c3x, {0, 0, 0}},
  1399.    {"TRIPLE BOXES WORKING BEHIND",           concept_triple_boxes_together, l_c3x, {0, 2, 0}},
  1400.    {"TRIPLE BOXES WORKING RIGHT",            concept_triple_boxes_together, l_c3x, {0, 3, 0}},
  1401.    {"TRIPLE BOXES WORKING LEFT",             concept_triple_boxes_together, l_c3x, {0, 1, 0}},
  1402.          {"", concept_comment, l_nonexistent_concept},
  1403.          {"", concept_comment, l_nonexistent_concept},
  1404.          {"", concept_comment, l_nonexistent_concept},
  1405.          {"", concept_comment, l_nonexistent_concept},
  1406.          {"", concept_comment, l_nonexistent_concept},
  1407.          {"", concept_comment, l_nonexistent_concept},
  1408.          {"", concept_comment, l_nonexistent_concept},
  1409.          {"", concept_comment, l_nonexistent_concept},
  1410.          {"", concept_comment, l_nonexistent_concept},
  1411.    {"QUADRUPLE BOXES",                       concept_quad_boxes,            l_c4a},
  1412.    {"QUADRUPLE BOXES WORKING TOGETHER",      concept_quad_boxes_together,   l_c4a, {0, 8, 0}},
  1413.    {"QUADRUPLE BOXES WORKING APART",         concept_quad_boxes_together,   l_c4a, {0, 9, 0}},
  1414.    {"QUADRUPLE BOXES WORKING FORWARD",       concept_quad_boxes_together,   l_c4a, {0, 0, 0}},
  1415.    {"QUADRUPLE BOXES WORKING BEHIND",        concept_quad_boxes_together,   l_c4a, {0, 2, 0}},
  1416.    {"QUADRUPLE BOXES WORKING RIGHT",         concept_quad_boxes_together,   l_c4a, {0, 3, 0}},
  1417.    {"QUADRUPLE BOXES WORKING LEFT",          concept_quad_boxes_together,   l_c4a, {0, 1, 0}},
  1418. /* -------- column break -------- */
  1419.    {"SPLIT PHANTOM DIAMONDS",                concept_do_phantom_diamonds,   l_c3x, {&(map_hv_qtg_2), phantest_impossible}},
  1420.    {"INTERLOCKED PHANTOM DIAMONDS",          concept_do_phantom_diamonds,   l_c4, {&(map_intlk_phantom_dmd), phantest_impossible}},
  1421.    {"PHANTOM DIAMONDS",                      concept_do_phantom_diamonds,   l_c4, {&(map_phantom_dmd), phantest_first_or_both}},
  1422.          {"", concept_comment, l_nonexistent_concept},
  1423.          {"", concept_comment, l_nonexistent_concept},
  1424.          {"", concept_comment, l_nonexistent_concept},
  1425.          {"", concept_comment, l_nonexistent_concept},
  1426.          {"", concept_comment, l_nonexistent_concept},
  1427.          {"", concept_comment, l_nonexistent_concept},
  1428.          {"", concept_comment, l_nonexistent_concept},
  1429.          {"", concept_comment, l_nonexistent_concept},
  1430.          {"", concept_comment, l_nonexistent_concept},
  1431.          {"", concept_comment, l_nonexistent_concept},
  1432.          {"", concept_comment, l_nonexistent_concept},
  1433.    {"TRIPLE DIAMONDS",                       concept_triple_diamonds,          l_c3a},
  1434.    {"TRIPLE DIAMONDS WORKING TOGETHER",      concept_triple_diamonds_together, l_c3x},
  1435.          {"", concept_comment, l_nonexistent_concept},
  1436.          {"", concept_comment, l_nonexistent_concept},
  1437.          {"", concept_comment, l_nonexistent_concept},
  1438.          {"", concept_comment, l_nonexistent_concept},
  1439.          {"", concept_comment, l_nonexistent_concept},
  1440.          {"", concept_comment, l_nonexistent_concept},
  1441.          {"", concept_comment, l_nonexistent_concept},
  1442.          {"", concept_comment, l_nonexistent_concept},
  1443.          {"", concept_comment, l_nonexistent_concept},
  1444.          {"", concept_comment, l_nonexistent_concept},
  1445.          {"", concept_comment, l_nonexistent_concept},
  1446.          {"", concept_comment, l_nonexistent_concept},
  1447.          {"", concept_comment, l_nonexistent_concept},
  1448.          {"", concept_comment, l_nonexistent_concept},
  1449.    {"QUADRUPLE DIAMONDS",                    concept_quad_diamonds,          l_c4a},
  1450.    {"QUADRUPLE DIAMONDS WORKING TOGETHER",   concept_quad_diamonds_together, l_c4a},
  1451.  
  1452. /* tandem concepts */
  1453.  
  1454.    {"TANDEM",                                concept_tandem,                l_c1,         {0, FALSE, FALSE, 0, 0}},
  1455.    {"SO-AND-SO ARE TANDEM",                  concept_some_are_tandem,       l_c1,         {0, TRUE,  FALSE, 0, 0}},
  1456.    {"PHANTOM TANDEM",                        concept_phantom_tandem,        l_c4a,        {0, FALSE, FALSE, 1, 0}},
  1457.    {"GRUESOME TANDEM",                       concept_gruesome_tandem,       l_c4a,        {0, FALSE, FALSE, 2, 0}},
  1458.    {"AS COUPLES",                            concept_tandem,                l_a1,         {0, FALSE, FALSE, 0, 1}},
  1459.    {"SO-AND-SO ARE AS COUPLES",              concept_some_are_tandem,       l_a1,         {0, TRUE,  FALSE, 0, 1}},
  1460.    {"PHANTOM AS COUPLES",                    concept_phantom_tandem,        l_c4,         {0, FALSE, FALSE, 1, 1}},
  1461.    {"GRUESOME AS COUPLES",                   concept_gruesome_tandem,       l_c4a,        {0, FALSE, FALSE, 2, 1}},
  1462.    {"SIAMESE",                               concept_tandem,                l_c2,         {0, FALSE, FALSE, 0, 2}},
  1463. /* -------- column break -------- */
  1464.    {"TANDEM TWOSOME",                        concept_tandem,                l_c3,         {0, FALSE, TRUE,  0, 0}},
  1465.    {"SO-AND-SO ARE TANDEM TWOSOME",          concept_some_are_tandem,       l_c3,         {0, TRUE,  TRUE,  0, 0}},
  1466.    {"PHANTOM TANDEM TWOSOME",                concept_phantom_tandem,        l_c3,         {0, FALSE, TRUE,  1, 0}},
  1467.    {"GRUESOME TANDEM TWOSOME",               concept_gruesome_tandem,       l_c4a,        {0, FALSE, TRUE,  2, 0}},
  1468.    {"COUPLES TWOSOME",                       concept_tandem,                l_c3,         {0, FALSE, TRUE,  0, 1}},
  1469.    {"SO-AND-SO ARE COUPLES TWOSOME",         concept_some_are_tandem,       l_c3,         {0, TRUE,  TRUE,  0, 1}},
  1470.    {"PHANTOM COUPLES TWOSOME",               concept_phantom_tandem,        l_c3,         {0, FALSE, TRUE,  1, 1}},
  1471.    {"GRUESOME TWOSOME",                      concept_gruesome_tandem,       l_c4a,        {0, FALSE, TRUE,  2, 1}},
  1472.    {"SIAMESE TWOSOME",                       concept_tandem,                l_c3,         {0, FALSE, TRUE,  0, 2}},
  1473.  
  1474. /* distorted concepts */
  1475.  
  1476.    {"STAGGER",                               concept_do_phantom_2x4,        l_c2,         {&(map_stagger), phantest_only_one, 0}},
  1477.    {"STAIRSTEP COLUMNS",                     concept_do_phantom_2x4,        l_c4,         {&(map_stairst), phantest_only_one, 0}},
  1478.    {"LADDER COLUMNS",                        concept_do_phantom_2x4,        l_c4,         {&(map_ladder), phantest_only_one, 0}},
  1479.    {"OFFSET COLUMNS",                        concept_distorted,             l_c2,         {0, 0, disttest_offset}},
  1480.    {"\"Z\" COLUMNS",                         concept_distorted,             l_c3,         {0, 0, disttest_z}},
  1481.    {"DISTORTED COLUMNS",                     concept_distorted,             l_c3,         {0, 0, disttest_any}},
  1482.    {"DIAGONAL COLUMN",                       concept_single_diagonal,       l_c3,         {0, 0}},
  1483.    {"TWO DIAGONAL COLUMNS",                  concept_double_diagonal,       l_c3,         {0, 0}},
  1484.    {"\"O\"",                                 concept_do_phantom_2x4,        l_c1,         {&(map_o_s2x4_3), phantest_only_first_one, 0}},
  1485.    {"BUTTERFLY",                             concept_do_phantom_2x4,        l_c1,         {&(map_x_s2x4_3), phantest_only_second_one, 0}},
  1486. /* -------- column break -------- */
  1487.    {"BIGBLOCK",                              concept_do_phantom_2x4,        l_c3a,        {&(map_stagger), phantest_only_one, 1}},
  1488.    {"STAIRSTEP LINES",                       concept_do_phantom_2x4,        l_c4,         {&(map_ladder), phantest_only_one, 1}},
  1489.    {"LADDER LINES",                          concept_do_phantom_2x4,        l_c4,         {&(map_stairst), phantest_only_one, 1}},
  1490.    {"OFFSET LINES",                          concept_distorted,             l_c2,         {0, 1, disttest_offset}},
  1491.    {"\"Z\" LINES",                           concept_distorted,             l_c3,         {0, 1, disttest_z}},
  1492.    {"DISTORTED LINES",                       concept_distorted,             l_c3,         {0, 1, disttest_any}},
  1493.    {"DIAGONAL LINE",                         concept_single_diagonal,       l_c3,         {0, 1}},
  1494.    {"TWO DIAGONAL LINES",                    concept_double_diagonal,       l_c3,         {0, 1}},
  1495. /* -------- column break -------- */
  1496.    {"PHANTOM STAGGER COLUMNS",               concept_do_phantom_2x4,        l_c4,         {&(map_stagger), phantest_both, 0}},
  1497.    {"PHANTOM STAIRSTEP COLUMNS",             concept_do_phantom_2x4,        l_c4,         {&(map_stairst), phantest_both, 0}},
  1498.    {"PHANTOM LADDER COLUMNS",                concept_do_phantom_2x4,        l_c4,         {&(map_ladder), phantest_both, 0}},
  1499.    {"PHANTOM OFFSET COLUMNS",                concept_do_phantom_2x4,        l_c4a,        {&(map_offset), phantest_both, 0}},
  1500.          {"", concept_comment, l_nonexistent_concept},
  1501.          {"", concept_comment, l_nonexistent_concept},
  1502.          {"", concept_comment, l_nonexistent_concept},
  1503.          {"", concept_comment, l_nonexistent_concept},
  1504.    {"PHANTOM BUTTERFLY OR \"O\"",            concept_do_phantom_2x4,        l_c4a,        {&(map_but_o), phantest_both, 0}},
  1505. /* -------- column break -------- */
  1506.    {"PHANTOM BIGBLOCK LINES",                concept_do_phantom_2x4,        l_c4,         {&(map_stagger), phantest_both, 1}},
  1507.    {"PHANTOM STAIRSTEP LINES",               concept_do_phantom_2x4,        l_c4,         {&(map_ladder), phantest_both, 1}},
  1508.    {"PHANTOM LADDER LINES",                  concept_do_phantom_2x4,        l_c4,         {&(map_stairst), phantest_both, 1}},
  1509.    {"PHANTOM OFFSET LINES",                  concept_do_phantom_2x4,        l_c4a,        {&(map_offset), phantest_both, 1}},
  1510.  
  1511. /* 4-person distorted concepts */
  1512.  
  1513.    {"SPLIT",                                 concept_split,                 l_mainstream},
  1514.    {"ONCE REMOVED",                          concept_once_removed,          l_c2,         {0, 0}},
  1515.    {"ONCE REMOVED DIAMONDS",                 concept_once_removed,          l_c3,         {0, 1}},
  1516.    {"MAGIC",                                 concept_magic,                 l_c1},
  1517.    {"DIAGONAL",                              concept_do_both_boxes,         l_c3a,        {&(map_2x4_diagonal), 97, FALSE}},
  1518.    {"TRAPEZOID",                             concept_do_both_boxes,         l_c3a,        {&(map_2x4_trapezoid), 97, FALSE}},
  1519. /* -------- column break -------- */
  1520.    {"INTERLOCKED PARALLELOGRAM",             concept_do_both_boxes,         l_c3x,        {&(map_2x4_int_pgram), 97, TRUE}},
  1521.    {"INTERLOCKED BOXES",                     concept_misc_distort,          l_c3x,        {0, 3, 0}},
  1522.    {"TWIN PARALLELOGRAMS",                   concept_misc_distort,          l_c3x,        {0, 2, 0}},
  1523.    {"EACH \"Z\"",                            concept_misc_distort,          l_c3a,        {0, 0, 0}},
  1524.    {"INTERLOCKED \"Z's\"",                   concept_misc_distort,          l_c3a,        {0, 0, 8}},
  1525. /* -------- column break -------- */
  1526.    {"JAY",                                   concept_misc_distort,          l_c3a,        {0, 1, 0}},
  1527.    {"BACK-TO-FRONT JAY",                     concept_misc_distort,          l_c3a,        {0, 1, 8}},
  1528.    {"BACK-TO-BACK JAY",                      concept_misc_distort,          l_c3a,        {0, 1, 16}},
  1529.    {"FACING PARALLELOGRAM",                  concept_misc_distort,          l_c3x,        {0, 4, 0}},
  1530.    {"BACK-TO-FRONT PARALLELOGRAM",           concept_misc_distort,          l_c3x,        {0, 4, 8}},
  1531.    {"BACK-TO-BACK PARALLELOGRAM",            concept_misc_distort,          l_c3x,        {0, 4, 16}},
  1532. /* -------- column break -------- */
  1533.    {"IN YOUR BLOCKS",                        concept_do_phantom_2x2,        l_c1,         {&(map_blocks), phantest_2x2_only_two}},
  1534.    {"4 PHANTOM INTERLOCKED BLOCKS",          concept_do_phantom_2x2,        l_c4a,        {&(map_blocks), phantest_2x2_both}},
  1535.    {"TRIANGULAR BLOCKS",                     concept_do_phantom_2x2,        l_c4,         {&(map_trglblk), phantest_2x2_only_two}},
  1536.    {"4 PHANTOM TRIANGULAR BLOCKS",           concept_do_phantom_2x2,        l_c4,         {&(map_trglblk), phantest_2x2_both}},
  1537.  
  1538. /* miscellaneous concepts */
  1539.  
  1540.    {"LEFT",                                  concept_left,                  l_mainstream},
  1541.    {"REVERSE",                               concept_reverse,               l_mainstream},
  1542.    {"CROSS",                                 concept_cross,                 l_mainstream},
  1543.    {"SINGLE",                                concept_single,                l_mainstream},
  1544.    {"GRAND",                                 concept_grand,                 l_plus},
  1545.          {"", concept_comment, l_nonexistent_concept},
  1546.    {"TRIANGLE",                              concept_triangle,              l_c1},
  1547.    {"DIAMOND",                               concept_diamond,               l_c3a},
  1548.    {"INTERLOCKED",                           concept_interlocked,           l_c1},
  1549.    {"12 MATRIX",                             concept_12_matrix,             l_c3a},
  1550.    {"FUNNY",                                 concept_funny,                 l_c2},
  1551. /* -------- column break -------- */
  1552.    {"PARALLELOGRAM",                         concept_parallelogram,         l_c2},
  1553.    {"PHANTOM",                               concept_c1_phantom,            l_c1},
  1554.    {"SO-AND-SO ARE STANDARD",                concept_standard,              l_c4a,        {0, 0}},
  1555.    {"STABLE",                                concept_stable,                l_c3a,        {0, FALSE}},
  1556.    {"SO-AND-SO ARE STABLE",                  concept_so_and_so_stable,      l_c3a,        {0, TRUE}},
  1557.    {"TRACE",                                 concept_trace,                 l_c3x},
  1558.    {"(old) STRETCH",                         concept_old_stretch,           l_c1},
  1559.    {"STRETCHED SETUP",                       concept_new_stretch,           l_c2},
  1560.    {"FERRIS",                                concept_ferris,                l_c3x,        {0, 0}},
  1561.    {"RELEASE",                               concept_ferris,                l_c3a,        {0, 1}},
  1562. /* -------- column break -------- */
  1563.    {"CENTERS",                               concept_centers_or_ends,       l_mainstream, {0, 0}},
  1564.    {"ENDS",                                  concept_centers_or_ends,       l_mainstream, {0, 1}},
  1565.    {"CENTERS AND ENDS",                      concept_centers_and_ends,      l_mainstream, {0, 0}},
  1566.    {"CENTER SIX",                            concept_centers_or_ends,       l_mainstream, {0, 2}},
  1567.    {"OUTER SIX",                             concept_centers_or_ends,       l_mainstream, {0, 5}},
  1568.    {"CENTER TWO",                            concept_centers_or_ends,       l_mainstream, {0, 4}},
  1569.    {"OUTER TWO",                             concept_centers_or_ends,       l_mainstream, {0, 3}},
  1570.    {"CENTER 6/OUTER 2",                      concept_centers_and_ends,      l_mainstream, {0, 2}},
  1571.    {"CENTER 2/OUTER 6",                      concept_centers_and_ends,      l_mainstream, {0, 3}},
  1572.          {"", concept_comment, l_nonexistent_concept},
  1573.    {"CHECKPOINT",                            concept_checkpoint,            l_c2,         {0, 0}},
  1574.    {"REVERSE CHECKPOINT",                    concept_checkpoint,            l_c4,         {0, 1}},
  1575.          {"", concept_comment, l_nonexistent_concept},
  1576.    {"CHECKERBOARD",                          concept_checkerboard,          l_c3a,        {0, s1x4}},
  1577.    {"CHECKERBOX",                            concept_checkerboard,          l_c3a,        {0, s2x2}},
  1578.    {"CHECKERDIAMOND",                        concept_checkerboard,          l_c3a,        {0, sdmd}},
  1579.          {"", concept_comment, l_nonexistent_concept},
  1580.    {"two calls in succession",               concept_sequential,            l_mainstream},
  1581.          {"", concept_comment, l_nonexistent_concept},
  1582.    {"ON YOUR OWN",                           concept_on_your_own,           l_c3x},
  1583.    {"SO-AND-SO ONLY",                        concept_so_and_so_only,        l_mainstream, {0, 0}},
  1584.    {"OWN THE SO-AND-SO",                     concept_some_vs_others,        l_c3x,        {0, 1}},
  1585.    {"SO-AND-SO START",                       concept_so_and_so_begin,       l_c2,         {0, 0}},
  1586.          {"", concept_comment, l_nonexistent_concept},
  1587.    {"RANDOM",                                concept_meta,                  l_c3x,        {0, 0}},
  1588.    {"REVERSE RANDOM",                        concept_meta,                  l_c3x,        {0, 1}},
  1589.    {"PIECEWISE",                             concept_meta,                  l_c3x,        {0, 2}},
  1590.    {"FRACTIONAL",                            concept_fractional,            l_c2,         {0, 0}},
  1591.    {"INTERLACE",                             concept_interlace,             l_c3x},
  1592.    {"START <concept>",                       concept_meta,                  l_c2,         {0, 3}},
  1593.    {"DO THE Nth PART <concept>",             concept_nth_part,              l_c2,         {0, 0}},
  1594.    {"REPLACE THE Nth PART OF X WITH Y",      concept_replace_nth_part,      l_c2,         {0, 0}},
  1595.    {"INTERRUPT X AFTER THE Nth PART WITH Y", concept_replace_nth_part,      l_c2,         {0, 1}},
  1596. /* -------- column break -------- */
  1597.    {"IN POINT TRIANGLE",                     concept_randomtrngl,           l_c1,         {0, 1}},
  1598.    {"OUT POINT TRIANGLE",                    concept_randomtrngl,           l_c1,         {0, 0}},
  1599.    {"INSIDE TRIANGLES",                      concept_randomtrngl,           l_c1,         {0, 2}},
  1600.    {"OUTSIDE TRIANGLES",                     concept_randomtrngl,           l_c1,         {0, 3}},
  1601.    {"TALL 6",                                concept_randomtrngl,           l_c1,         {0, 4}},
  1602.    {"SHORT 6",                               concept_randomtrngl,           l_c1,         {0, 5}},
  1603.    {"WAVE-BASE TRIANGLES",                   concept_randomtrngl,           l_c1,         {0, 6}},
  1604.    {"TANDEM-BASE TRIANGLES",                 concept_randomtrngl,           l_c1,         {0, 7}},
  1605.    {"SO-AND-SO-BASED TRIANGLE",              concept_selbasedtrngl,         l_c1,         {0, 20}},
  1606.          {"", concept_comment, l_nonexistent_concept},
  1607.    {"CONCENTRIC",                            concept_concentric,            l_c1,         {0, schema_concentric}},
  1608.    {"CROSS CONCENTRIC",                      concept_concentric,            l_c2,         {0, schema_cross_concentric}},
  1609.    {"SINGLE CONCENTRIC",                     concept_single_concentric,     l_c4,         {0, schema_single_concentric}},
  1610.    {"SINGLE CROSS CONCENTRIC",               concept_single_concentric,     l_c4,         {0, schema_single_cross_concentric}},
  1611.          {"", concept_comment, l_nonexistent_concept},
  1612.    {"GRAND WORKING FORWARD",                 concept_grand_working,         l_c3x,        {0, 0}},
  1613.    {"GRAND WORKING BEHIND",                  concept_grand_working,         l_c3x,        {0, 2}},
  1614.    {"GRAND WORKING LEFT",                    concept_grand_working,         l_c3x,        {0, 1}},
  1615.    {"GRAND WORKING RIGHT",                   concept_grand_working,         l_c3x,        {0, 3}},
  1616.    {"GRAND WORKING TOGETHER",                concept_grand_working,         l_c3x,        {0, 8}},
  1617.    {"GRAND WORKING APART",                   concept_grand_working,         l_c3x,        {0, 9}},
  1618.          {"", concept_comment, l_nonexistent_concept},
  1619.    {"DOUBLE-OFFSET 1/4-TAG",                 concept_double_offset,         l_c4,         {0, 0}},
  1620.    {"DOUBLE-OFFSET 3/4-TAG",                 concept_double_offset,         l_c4,         {0, 1}},
  1621.    {"DOUBLE-OFFSET THING",                   concept_double_offset,         l_c4,         {0, 2}},
  1622.    {"DOUBLE-OFFSET DIAMONDS",                concept_double_offset,         l_c4,         {0, 3}},
  1623.          {"", concept_comment, l_nonexistent_concept},
  1624.    {"INRIGGER",                              concept_rigger,                l_c3x,        {0, 2}},
  1625.    {"OUTRIGGER",                             concept_rigger,                l_c3x,        {0, 0}},
  1626.    {"LEFTRIGGER",                            concept_rigger,                l_c3x,        {0, 1}},
  1627.    {"RIGHTRIGGER",                           concept_rigger,                l_c3x,        {0, 3}},
  1628.    {"[call]-RIGGER",                         concept_callrigger,            l_c3x},
  1629.  
  1630. /* general concepts */
  1631.  
  1632.    {"CENTERS",                               concept_centers_or_ends,       l_mainstream, {0, 0}},
  1633.    {"ENDS",                                  concept_centers_or_ends,       l_mainstream, {0, 1}},
  1634.    {"CENTERS AND ENDS",                      concept_centers_and_ends,      l_mainstream, {0, 0}},
  1635.    {"LEFT",                                  concept_left,                  l_mainstream},
  1636.    {"REVERSE",                               concept_reverse,               l_mainstream},
  1637.    {"SPLIT",                                 concept_split,                 l_mainstream},
  1638.    {"CROSS",                                 concept_cross,                 l_mainstream},
  1639.    {"GRAND",                                 concept_grand,                 l_plus},
  1640.    {"MAGIC",                                 concept_magic,                 l_c1},
  1641.    {"INTERLOCKED",                           concept_interlocked,           l_c1},
  1642.    {"12 MATRIX",                             concept_12_matrix,             l_c3a},
  1643.    {"FUNNY",                                 concept_funny,                 l_c2},
  1644.    {"SINGLE",                                concept_single,                l_mainstream},
  1645.    {"CONCENTRIC",                            concept_concentric,            l_c1,         {0, schema_concentric}},
  1646.    {"AS COUPLES",                            concept_tandem,                l_a1,         {0, FALSE, FALSE, 0, 1}},
  1647.    {"TANDEM",                                concept_tandem,                l_c1,         {0, FALSE, FALSE, 0, 0}},
  1648.    {"???",                                   marker_end_of_list}};
  1649.